PHP数组多重排序 - 按值然后按键?

2022-08-30 15:04:59

我有一个带有数值的字符串键数组,用于具有每个标签出现次数的标签列表中,因此:

$arrTags['mango'] = 2; 
$arrTags['orange'] = 4; 
$arrTags['apple'] = 2; 
$arrTags['banana'] = 3;

这样我就可以按降序显示标签列表,如下所示:

orange (4)  
banana (3) 
mango (2) 
apple (2)

我可以使用arsort按出色的值反向排序,但我也希望任何具有相同数值的标签按字母顺序排序,因此最终结果可以是:

orange (4)  
banana (3) 
apple (2) 
mango (2)

有没有办法做到这一点?我猜usort可能是要走的路,但我看着 php.net 的例子,我的眼睛瞪大了!非常感谢!!!


答案 1

正如 Scott Saunders 在对 David 解决方案的评论中所暗示的那样,您可以使用 array_keys() 和 array_values() 函数来摆脱循环。实际上,您可以在一行代码中解决此问题:

array_multisort(array_values($arrTags), SORT_DESC, array_keys($arrTags), SORT_ASC, $arrTags);

答案 2

看看例子#3:http://php.net/manual/en/function.array-multisort.php

您需要创建两个数组以用作索引;一个由原始数组的键组成,另一个由原始数组的值组成。

然后使用多重排序按文本值(原始数组的键)排序,然后按数值(原始数组的值)排序。