在php中排序多维数组

时间:2012-10-26 13:51:32

标签: php sorting multidimensional-array

  

可能重复:
  PHP - Multiple uasort functions breaks sorting

我在PHP中有3列的多维数组。我需要按" awards_units"进行排序。如果两个用户拥有相同的award_units(tiebreaker),那么选择最少单位的用户将首先出现。

user_id awarded_units selected_units

15       5               2
22       5               1
3        4               2
4        4               5
5        4               1

如您所见,我已经使用一些多维排序函数在awards_units的基础上对数组进行了排序。现在,我需要解决决胜局条件。由于user_id = 15和user_id = 22具有相同的award_units,因此user_id 22必须首先出现。

正确的顺序将是

user_id awarded_units selected_units

22       5               1
15       5               2
5        4               1
3        4               2
4        4               5

请告诉我该怎么做。谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用array_multisort

$cols = array();
foreach ($multiArray as $key => $value) 
{
    $cols['awarded_units'][$key]  = $value['awarded_units'];
    $cols['selected_units'][$key] = $value['selected_units'];
}
array_multisort($cols['awarded_units'], SORT_DESC, $cols['selected_units'], SORT_ASC, $multiArray);

答案 1 :(得分:0)

使用custom sort function with usort

usort($data, function($a, $b) {
    if ($a['awarded_units'] == $b['awarded_units'])
    {
        return $b['selected_units'] - $a['selected_units'];
    }

    return $b['awarded_units'] - $a['awarded_units'];
});

您也可以使用array_multisort,但我更喜欢使用usort - 更灵活,更易读。