我正在尝试按值降序保存键(arsort
)对数组进行排序,但如果值相等,我希望它也按键递增的顺序排序(ksort
)。
我一直在尝试这个:
ksort($array);
arsort($array);
但是没有保留ksort,并且arsort
之后钥匙再次混乱。
E.g。如果我的输入数组在:
$array[0] = 4;
$array[1] = 2;
$array[2] = 3;
$array[3] = 1;
$array[4] = 4;
我想对它进行排序,结果如下:
$array[0] = 4;
$array[4] = 4;
$array[2] = 3;
$array[1] = 2;
$array[3] = 1;
不喜欢这样:
$array[4] = 4;
$array[0] = 4;
$array[2] = 3;
$array[1] = 2;
$array[3] = 1;
但以前的密钥顺序似乎受到arsort
的干扰。
答案 0 :(得分:1)
PHP在PHP 4.1中删除了稳定排序(保证了您想要的顺序): https://bugs.php.net/bug.php?id=53341&edit=1
这是一个看似愚蠢的问题,带有代码片段,可以解决它(基本上:编写自己的排序函数。嘘。): Preserve key order (stable sort) when sorting with PHP's uasort
答案 1 :(得分:0)
这很可惜,因为它不受支持,这是我为它写的一个函数:
function arksort($array)
{
arsort($array);
$newarray=array();
$temp=array();
$on=current($array);
foreach($array as $key => $val)
{
if ($val===$on) $temp[$key]=$val;
else
{
ksort($temp);
$newarray=$newarray+$temp;
$temp=array();
$on=$val;
$temp[$key]=$val;
}
}
ksort($temp);
$newarray=$newarray+$temp;
reset($newarray);
return $newarray;
}