我尝试按值降序keys (arsort)对数组进行排序,但如果值相等,我希望它也按键升序(ksort)排序。
我一直在尝试这样做:
ksort($array);
arsort($array);但是ksort并没有被保留,并且在arsort之后,密钥再次变得混乱。
例如,如果我的输入数组在:
$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打乱了。
发布于 2011-11-28 14:17:03
PHP放弃了PHP4.1中的稳定排序(它保证了您想要的排序):https://bugs.php.net/bug.php?id=53341&edit=1
这里有一个看似被愚弄的问题,带有一个代码片段,来解决这个问题(基本上:编写你自己的排序函数。Boo.):Preserve key order (stable sort) when sorting with PHP's uasort
发布于 2011-11-28 14:21:16
这很遗憾,因为它不受支持,下面是我为它编写的一个函数:
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;
}https://stackoverflow.com/questions/8292085
复制相似问题