繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM