如何在PHP中多次排序一个数组

时间:2015-03-05 15:37:00

标签: php arrays sorting

我知道如何多次对数组进行排序。 好吧,如果我这样解释它似乎很明显,所以让我更具体一点。

我有一个多维数组:

$array = [
    0 => [
        'influence' => 2,
        'name' => 'abcd'
    ],
    1 => [
        'influence' => 3,
        'name' => 'cdef',
    ],
    2 => [
        'influence' => 3,
        'name' => 'bcde'
    ]
];

在这种情况下,我将按influence DESC 排序。 但是发生的事情是我的数组的元素1将位于第一位。我不想要这个,所以我想现在按name ASC 对这个排序数组进行排序。但是没有破坏第一种,因为如果我应用第二种排序,我的标签将是:

$array = [
    0 => [
        'influence' => 2,
        'name' => 'abcd'
    ],
    1 => [
        'influence' => 3,
        'name' => 'bcde',
    ],
    2 => [
        'influence' => 3,
        'name' => 'cdef'
    ]
];

Wherehas 我希望它是:

$array = [
    0 => [
        'influence' => 3,
        'name' => 'bcde'
    ],
    1 => [
        'influence' => 3,
        'name' => 'cdef',
    ],
    2 => [
        'influence' => 2,
        'name' => 'abcd'
    ],
];

有人有想法吗?

可能对你来说仍然很明显.. 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您需要的是用户定义的排序函数usort

然后它会像

usort($array, function($a, $b){

    if($a['influence'] == $b['influence'])
    {
         // notice $b switched with $a to change sort direction
         return strcmp($b['name'], $a['name']);
    } else {
         return strcmp($a['influence'], $b['influence']);
    }
});

代码未经过测试,但该想法应该有效。

答案 1 :(得分:1)

如果你有PHP> = 5.5.0,你可以array_column使用array_multisort

array_multisort(array_column($array, 'name'), SORT_DESC,
                array_column($array, 'influence'), SORT_ASC, $array);

或使用PHP Implementation of array_column()