之前提出的解决方案看起来很合理,但实际上并不起作用:
ksort($arrTags);
arsort($arrTags);
实现所需排序的完整PHP代码如下:
$k = array_keys($arrTags);
$v = array_values($arrTags);
array_multisort($k, SORT_ASC, $v, SORT_DESC);
$arrTags = array_combine($k, $v);
请注意,array_multisort() 在用户输入上使用引用,因此您需要使用两个临时变量 ($k 和 $v) 作为用户输入提供内容。这样,array_multisort() 可以更改内容。稍后,通过 array_combine() 重新构建已排序的数组。
我已经编写了一个可重复使用的函数来完成此任务:
<?php
function SortArrayByKeyThanValue (&$pArray, $pSortMethodForKey = SORT_ASC, $pSortMethodForValue = SORT_ASC)
{
if (count($pArray) < 2)
return;
$k = array_keys ($pArray);
$v = array_values($pArray);
array_multisort(
$v, $pSortMethodForValue,
$k, $pSortMethodForKey
);
$pArray = array_combine($k, $v);
}
?>
array_multi_sort()
将在内部创建另一个数组$indirect
,其中每个索引都是包含所提供数组的所有值的数组:$indirect[$i] = [$v1,$v2,$v3,...,NULL]
。然后使用特殊比较函数对数组应用快速排序,该函数将首先比较$indirect[$a][$r]
和$indirect[$b][$r]
,其中$r==0
如果它们相等,则增加$r
直到$indirect[$a][$r]
为null
(已使用所有提供的数组)。最后,根据$indirect
重写每个数组。如果您使用不同大小的数组,则返回FALSE。 - 2072