[英]find and sort array by lowest value in multidimensional array
我有一个包含许多数组的数组。 像这样:
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)
我不知道它为什么会这样做。
我知道这个问题之前可能已被问及(并已回答),但作为非母语英语的人,我对于我应该搜索的内容感到有些不知所措。
谢谢您的帮助!
我的回答只是重新格式化你的函数,使其更明确地发生了什么:
$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。
您可以通过迭代思考数组来使用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
是你的多维数组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.