PHP如何将经纬度数组格式化为$point1/$point2以调用distanceCalculation函数
如何将现有数组转换为经纬度计算所需的$point1/$point2格式?
首先得说,你遇到的核心问题其实不是数组格式不匹配,而是误用了array_push()的返回值!先理清楚问题所在:
我的查询返回的数组格式为:
Array ( [0] => Array ( [lat] => 32.9697 [long] => -96.80322 ) [1] => Array ( [lat] => 29.46786 [long] => -98.53506 ) )而示例中的格式是单个关联数组:
$point1 = array("lat" => "48.8666667", "long" => "2.3333333"); $point2 = array("lat" => "19.4341667", "long" => "-99.1386111");
其实你生成的$to和$from已经完全符合$point1/$point2的格式了!问题出在这两行代码:
$array1=array_push($finalDest,$to); $array2=array_push($finalDest,$from);
array_push()函数返回的是新数组的长度,不是你刚添加进去的元素!所以$array1和$array2其实是数字(比如第一次push后返回1,第二次返回2),根本不是经纬度数组,这才导致你调用distanceCalculation()时出错。
修正方案
你完全不需要绕弯子,直接用已经生成好的$to和$from作为计算参数就行,和示例的格式完全一致。如果需要把这些点存到$finalDest里,单独执行push操作即可:
// 先初始化$finalDest数组 $finalDest = []; foreach ($usersInfo as $users) { $ridefrom = $users['ride_from']; $rideto = $users['ride_to']; // 拆分经纬度并生成符合要求的关联数组 $tempLatLong = explode(',', $users['ride_from']); $tempLatLong1 = explode(',', $users['ride_to']); $key = array('lat','long'); // $to和$from就是你要的$point1/$point2格式! $to = array_combine($key, $tempLatLong); $from = array_combine($key, $tempLatLong1); // 如果你需要把这两个点存到$finalDest里,单独执行push,不要赋值给变量 array_push($finalDest, $to); array_push($finalDest, $from); // 直接用$to和$from调用计算函数 $km = distanceCalculation($to['lat'], $to['long'], $from['lat'], $from['long']); echo $km; // 现在$finalDest里的元素就是你展示的格式,之后要取的话也可以这样用: // $point1 = $finalDest[0]; // $point2 = $finalDest[1]; // $km = distanceCalculation($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); }
补充说明
你现在生成的$finalDest数组,里面的每个元素都是完全符合示例中$point1/$point2的格式的。比如$finalDest[0]就是第一个点的关联数组,$finalDest[1]是第二个点的,直接拿出来用就行,不需要额外转换。
内容的提问来源于stack exchange,提问作者new developer
相关产品推荐
相关产品推荐

