我有一个包含许多数组的数组。像这样:
array{
array{
id => 1
name => place_1
lat => 56.1705
lon => 10.2010
distance => 1.545
}
array{
id => 14
name => place_14
lat => 56.1715
lon => 10.2049
distance => 1.765
}
//etc etc
}
我需要按照距离从低到高对数组中的数组进行排序 - 或者至少得到数组中最低距离的位置(如$array[1][4] == 1.765
)。
function sort_by_dist($a, $b){
return $a['distance'] - $b['distance'];
}
usort($array, 'sort_by_dist');
但是,在这种情况下,这只会返回bool(true)
我不知道它为什么这样做。
我知道这个问题之前可能已被问及(并已回答),但作为一名非英语母语的人,我对我应该搜索的内容感到有些不知所措。
感谢您的帮助!
答案 0 :(得分:2)
我的回答只是稍微改变了你的功能,使其更加清晰:
$a = array(
array(
'id' => 14,
'name' => 'place_14',
'lat' => 56.1715,
'lon' => 10.2049,
'distance' => 1.765,
),
array(
'id' => 1,
'name' => 'place_1',
'lat' => 56.1705,
'lon' => 10.2010,
'distance' => 1.545,
),
);
usort($a, function($a, $b) {
$d1 = $a['distance'];
$d2 = $b['distance'];
if ($d1 == $d2) {
return 0;
}
return ($d1 < $d2) ? -1 : 1;
});
// the array $a is sorted.
print_r($a);
对usort
的输入数组进行排序,如果排序失败,usort
将返回false,否则返回true。
答案 1 :(得分:1)
您可以通过迭代思考数组来使用array_multisort:
function sort_by(&$array, $subkey ) {
foreach ($array as $subarray) {
$keys[] = $subarray[$subkey];
}
array_multisort($keys, SORT_ASC, $array);
}
sort_by($coords, 'distance');// $coords is now sorted by distance
$coords
是你的多维数组。