2017-10-21 23 views
0

我有一個包含地理數據的CSV。我製作了一個腳本,將其轉換爲數組並將其保存到數據庫中。但我想保存緯度和長度爲十進制。但作爲一個字符串的一些奇怪的原因它顯示一個值,但是當我將它轉換爲任何類型的浮動或decimail它顯示0?帶浮點(緯度,longituse)的字符串不能轉換爲浮點數 - 這表示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 
    ............... 
} 

數據陣列看起來像這樣(你可以看到它顯示的緯度和經度.....但是當我把它轉換爲一個數字,它只是顯示爲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 

編輯當我轉儲使用symfonys VAR自卸車我得到"\x005\x002\x00.\x003\x004\x009\x009\x009\x00"但是當我VAR dumpt它我得到的「弦」號

+0

源字符串似乎編碼在一些多字節編碼中。調整您的語言環境設置,使其與'setlocale()'函數的源文件編碼相匹配。至於'floatval()'的零結果,前導字符不會被識別爲數字(參見[字符串轉換爲數字](http://php.net/manual/en/language.types.string.php#language .types.string.conversion))。 –

回答

0

改變了var它

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

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

正如我所說的鑄造浮動返回0 ... zo這種解決方案也會給0 – rZaaaa

0

確定仍然不知道問題是什麼,但我這樣做

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

固定它,這將返回一個「正常」的浮動值