所以我正在使用Google Maps api并检查一些位置距离。
我正在使用一段时间,我正在构建一个json编码(用于移动应用程序)
<?php
$x = 1;
$lats = array("47.070611", "47.114438", "47.166981", "47.259799", "47.073114");
$long = array("21.921930", "21.937037", "21.950941", "22.002783", "21.958194");
$locations = array();
while($x <= count($lats)) {
usleep(200000);
$origin="47.072222, 21.921111";
$desti="$lats[$x], $long[$x]";
//replace the spaces with "+"
$address1 = str_replace(' ', '+', $origin);
$address2 = str_replace(' ', '+', $desti);
//use concatenation as answered by @geocodezip
$routes=json_decode(file_get_contents('http://maps.googleapis.com/maps/api/directions/json?origin='.$address1.'&destination='.$address2.'&alternatives=true&sensor=false'))->routes;
//sort the routes based on the distance
usort($routes,create_function('$a,$b','return intval($a->legs[0]->distance->value) - intval($b->legs[0]->distance->value);'));
//print the shortest distance
$dist = $routes[0]->legs[0]->distance->text;
$loc = array();
if (empty($dist)) {
}else{
$loc = array('km'=>$dist);
array_push($locations, $loc);
}
$x++;
}
print '{"distanta":'.json_encode($locations).'}';
?>
结果将是:
{"distanta":[{"km":"6.9 km"},{"km":"2.3 km"},{"km":"7.2 km"},{"km":"4.3 km"}]}
但是我想对结果进行排序,以便数组中的第一个值最低,最后一个数组中的最后一个值(DESCENDING)
我希望得到这个:
{"distanta":[{"km":"2.3 km"},{"km":"4.3 km"},{"km":"6.9 km"},{"km":"7.2 km"}]}
任何帮助将不胜感激,我是PHP的新手
答案 0 :(得分:1)
一种方法是:
在$locations
数组中存储纯数字(距离):
$dist = $routes[0]->legs[0]->distance->text;
if (!empty($dist)) {
array_push($locations, $loc);
}
计算完所有距离后(即在while
循环之外),sort $locations
数组以数字形式显示:
sort($locations, SORT_NUMERIC);
然后,将数组更改为数组数组,包括km
个键:
foreach ($locations as &$loc) {
$loc = array('km' => $loc);
}
最后,使用json_encode()
,就像你一样:
print '{"distanta":'.json_encode($locations).'}';
答案 1 :(得分:-1)
[编辑]
对不起,我没有充分阅读你的代码,但这样做会有效。我试过了。
将usort($locations, function($a, $b) {return $a['km']-$b['km'];});
放在最后一行打印之前,亲眼看看!
--- [老帖子,这是错的] ---
您要做的实际上是对数组升序进行排序。这可以通过asort($locations)
轻松实现。 (这不起作用)