使用array_multisort对多维数组进行排序

时间:2011-03-14 22:54:28

标签: php arrays sorting

我有这个数组

Array
(
    [0] => Array
        (
            [brand] => blah blah
            [location] => blah blah
            [address] => blah blah
            [city] => blah blah
            [state] => CA
            [zip] => 90210
            [country] => USA
            [phone] => 555-1212
            [long] => -111
            [lat] => 34
            [distance] => 3.08
        )
    [1] => Array
        (
            [brand] => blah blah
            [location] => blah blah
            [address] => blah blah
            [city] => blah blah
            [state] => CA
            [zip] => 90210
            [country] => USA
            [phone] => 555-1212
            [long] => -111
            [lat] => 34
            [distance] => 5
        )
.
.
.

}

我希望能够按距离对哈希中的数组进行排序。

5 个答案:

答案 0 :(得分:22)

您需要先提取所有距离,然后将距离和数据传递给函数。如array_multisort文档中的示例3所示。

foreach ($data as $key => $row) {
    $distance[$key] = $row['distance'];
}

array_multisort($distance, SORT_ASC, $data);

这假设您希望首先获得最短距离,否则将SORT_ASC更改为SORT_DESC

答案 1 :(得分:4)

如果要避免循环,可以使用array_column函数来实现目标。 例如,

您希望使用距离排序

对数组进行排序

$arr = array(0 => array('lat' => 34,'distance' => 332.08),1 => Array('lat' => 34,'distance' => 5),2 => Array('lat' => 34,'distance' => 34));

使用下面的单行,您的数组将按距离排序

array_multisort(array_column($arr, 'distance'), SORT_ASC,SORT_NUMERIC,$arr);

现在, $ arr 包含已排序数组距离

答案 2 :(得分:2)

使用可以使用usort;

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

usort($array, "cmpDistance");

答案 3 :(得分:0)

此代码有助于使用array_multisort()

对多维数组进行排序
  $param_dt = array();
  foreach ($data_set as $key => $row) {
     if(isset($row['params']['priority']))
     {
       $param_dt[$key] = $row['params']['priority'];
     }
     else
     {
        $param_dt[$key] = -2; // if priority key is not set for this array - it first out
     }
    }

  array_multisort($param_dt, SORT_ASC,SORT_NUMERIC, $data_set); 

现在$data_set具有排序的元素列表。

答案 4 :(得分:0)

我们有一个行数组,但是 array_multisort() 需要一个列数组,所以我们使用下面的代码来获取列,然后执行排序。

// as of PHP 5.5.0 you can use array_column() instead of the above code
$brand= array_column($data, 'brand');
$city= array_column($data, 'city');

// Sort the data with volume descending, edition ascending
// Add $data as the last parameter, to sort by the common key
array_multisort($brand, SORT_DESC, $city, SORT_ASC, $data);