我知道如何多次对数组进行排序。 好吧,如果我这样解释它似乎很明显,所以让我更具体一点。
我有一个多维数组:
$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'
],
];
有人有想法吗?
可能对你来说仍然很明显.. 提前谢谢。
答案 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);