2017-10-21 20 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); 
} 

固定它,这将返回一个“正常”的浮动值