按列值对二维数组的行进行排序[重复]

问题描述 投票:0回答:4

我有一个循环访问一组值的数组,这就是它的样子:

$arr[] = array(
    "name" => $name, 
    "add1" => $add1, 
    "add2" => $add2, 
    "add3" => $add3, 
    "postcode" => $pc, 
    "distance" => $distance
);

简单而快速的问题(尽管我正在努力寻找答案),我想知道如何将数组排序为距离升序(这是一个浮点数)顺序?

php arrays sorting multidimensional-array
4个回答
3
投票

您可以使用 usort 并在比较函数中比较距离:

usort($arr, function($a, $b){
    return $a['distance'] - $b['distance'];
});

2
投票

编辑

我想我明白你现在想要实现的目标是什么。试试这个:

function array_sort_by_column(&$array, $col, $direction = SORT_ASC) {
    $sort_col = array();

    foreach ($array as $key => $row) {
        $sort_col[$key] = $row[$col];
    }

    array_multisort($sort_col, $direction, $array);
}

array_sort_by_column($arr, 'distance');

0
投票

我发现组织数组的另一种方法是将它们作为键,然后用这些键进行组织。

示例(使用您的代码):

$arr = array();    
$arr[$distance] = array("name" => $name, 
                   "add1" => $add1, 
                   "add2" => $add2, 
                   "add3" => $add3, 
                 "postcode" => $pc, 
           "distance" => $distance);

ksort($arr);

0
投票

您可以使用 usort 根据个性化规则对数组进行排序

<?php
    function sortOnDistance($a, $b) {
        if ($a['distance'] == $b['distance']) {
            return 0;
        }
        return ($a['distance'] < $b['distance']) ? -1 : 1;
    }

    usort($array, "sortOnDistance");
?>
© www.soinside.com 2019 - 2024. All rights reserved.