2017-10-21 1 views
0

Ich habe eine CSV mit Geodaten. Ich habe ein Skript erstellt, das dieses in ein Array umwandelt und es in der Datenbank speichert. aber ich möchte den Lat speichern und lange als Dezimalzahl. aber aus irgendeinem seltsamen Grund als String zeigt es einen Wert, aber wenn ich es in einen beliebigen Float oder Dezimail konvertieren, zeigt es 0?string mit float (latitude, longituse) kann nicht als float umgewandelt werden - das zeigt 0

ini_set('auto_detect_line_endings', TRUE); 
$tmpName = $_FILES['fileToUpload']['tmp_name']; 
$csvAsArray = array_map('str_getcsv', file($tmpName)); 
array_shift($csvAsArray); //removes first 
array_pop($csvAsArray); //removes last 

foreach ($csvAsArray as $k=>$v) { 
    $municipality = str_replace('"', "", $v[2]); 
    $city = str_replace('"', "", $v[3]); 
    $zip = str_replace('"', "", $v[4]); 
    $lat = $v[5]; 
    $data = [ 
     'country' => $v[0], 
     'province' => $v[1], 
     'municipality' => $v[2], 
     'city' => $v[3], 
     'nl_fourpp' => $v[4], 
     'lat' => $v[5], 
     'lng' => $v[6], 
     'date_created' => date('Y-m-d H:i:s') 
    ]; 

    var_dump($v[6]); // THIS SHOWS: string(15) "4.91666" 
    var_dump((float) $v[6]); // THIS SHOWS: float(0) 
    var_dump(floatval($v[6])); // THIS SHOWS: float(0) 
    var_dump(number_format($v[6])); // THIS SHOWS: Warning: number_format() expects parameter 1 to be float, string given in 
    //etc... 

    //save the fields 
    ............... 
} 

das Datenfeld sieht wie folgt aus (wie man sieht es zeigt die lat und lng ..... aber wenn ich es in eine Zahl umwandeln es zeigt nur 0?

Array 
(
    [country] => NL 
    [province] => Noord-Holland 
    [municipality] => Amsterdam 
    [city] => Amsterdam 
    [nl_fourpp] => 1000 
    [lat] => 52.34999 
    [lng] => 4.91666 
    [date_created] => 2017-10-21 07:18:21 
) 
1 

EDIT, wenn ich Dump die var symfonys var dumper mit i bekommen "\x005\x002\x00.\x003\x004\x009\x009\x009\x00" aber wenn ich dumpt es var ich erhalte die "string" Nummer

+0

Die Quelle Zeichenfolge codiert zu sein scheint in einigen Multibyte-Codierung. Passen Sie Ihre Gebietsschemaeinstellungen so an, dass sie der Quelldateicodierung mit der Funktion 'setlocale()' entsprechen. Was das Null-Ergebnis von 'floatval()' betrifft, werden die führenden Zeichen nicht als Zahlen erkannt (siehe [String-Konvertierung in Zahlen] (http://php.net/manual/en/language.types.string.php#language) .types.string.conversion)). –

Antwort

0

Änderung es

var_dump(number_format($v[6])); 

zu

var_dump(number_format((float)$v[6])); 
+0

wie ich sagte Casting float liefert 0 ... zo diese Lösung würde auch eine 0 geben – rZaaaa

0

ok noch nicht wissen, was das Problem ist, aber ich regelte es durch

tun
public function FixLatLngStr($str) { 
    $x = explode("\x00", $str); 
    array_shift($x); //removes first 
    array_pop($x); //removes last 
    return implode("",$x); 
} 

und dies gibt einen „normalen“ float Wert