查找数组并按多维数组中的最小值对数组进行排序


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是您的多维数组。