在多维数组中按最低值查找和排序数组

时间:2014-11-27 22:39:06

标签: php arrays sorting

我有一个包含许多数组的数组。像这样:

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) 我不知道它为什么这样做。

我知道这个问题之前可能已被问及(并已回答),但作为一名非英语母语的人,我对我应该搜索的内容感到有些不知所措。

感谢您的帮助!

2 个答案:

答案 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是你的多维数组。