我有以下变量和谷歌地图的一些坐标:
$coordinates = '(22.2819939, 114.15444100000002)';
为了将它们分开,我做了以下几点:
$coor = explode(',',str_replace(array('(',')'),'',$coordinates));
现在我需要以下列格式将此坐标发送到API:
$message = array("location"=>array($coor[1],$coor[0]));
我必须在json中发送它,所以我对数组进行编码,但我得到的是坐标作为字符串而不是数字:
$toSend = json_encode($message);
result-> {"location":["114.15444100000002","22.2819939"]}
如何避免json将坐标作为字符串并将其作为数字?
我需要这个结果:
{"location":[114.15444100000002,22.2819939]}
答案 0 :(得分:3)
您需要将它们从string
转换为float
。所以我们只需使用浮点转换
$coor = array_map('floatval', $coor);
答案 1 :(得分:1)
请参阅JSON Predefined Constants并使用JSON_NUMERIC_CHECK
选项(但您会失去一些精确度):
$toSend = json_encode($message, JSON_NUMERIC_CHECK);
JSON_NUMERIC_CHECK(整数)
将数字字符串编码为数字。自PHP 5.3.3起可用。
答案 2 :(得分:0)
您可以将字符串转换为数字
$number = (float) "114.15444100000002";
答案 3 :(得分:0)
您可以利用number_format()
来实现目标。请参阅以下示例:
$num_str = "114.15444100000002";
$str2float = (float)$num_str;
echo 'Cast to Float: ' . $str2float . PHP_EOL;
$num_format = number_format($num_str, 14);
echo 'With number_format(): ' . $num_format . PHP_EOL;
结果将是:
Cast to Float: 114.154441
With number_format(): 114.15444100000002
经过验证的number_format()
适用于您的情况。
P.S。你应该使用这个函数 解析JSON之后。您应该将值保留在字符串中,以防止在编码和解码过程中丢失精度。
P.S。正如@jszobody所提到的,如果值确实是坐标,那么精度绝不应超过6位小数。