[英]string with float (latitude, longituse) can not be cast as float - this shows 0
我有一个包含地理数据的CSV文件。 我制作了一个脚本,将其转换为数组并将其保存在数据库中。 但我想将经纬度保存为小数。 但是由于某种奇怪的原因,它显示为一个字符串,但是当我将其转换为任何类型的float或decimail时,它显示为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
...............
}
数据数组看起来像这样(如您所见,它显示了lat和lng .....但是当我将其转换为数字时,它仅显示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 dumper转储var时进行编辑,我得到"\\x005\\x002\\x00.\\x003\\x004\\x009\\x009\\x009\\x00"
但是当我var dumpt时,我得到了“字符串”数字
更改
var_dump(number_format($v[6]));
至
var_dump(number_format((float)$v[6]));
好的仍然不知道问题出在哪里,但是我通过做来解决了
public function FixLatLngStr($str) {
$x = explode("\x00", $str);
array_shift($x); //removes first
array_pop($x); //removes last
return implode("",$x);
}
这将返回一个“正常”的浮点值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.