PHP联合arsort&;对数组按照键名排序
我正在尝试按值降序排列数组,保留键(PHP联合arsort&;对数组按照键名排序,php,arrays,sorting,Php,Arrays,Sorting,我正在尝试按值降序排列数组,保留键(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
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;
不是这样的:
$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;
但是,在PHP4.1中,键的先前顺序似乎受到了
arsort
PHP丢弃的稳定排序(这保证了您想要的排序)的干扰:
这里有一个看似重复的问题,有一个代码片段,可以解决它(基本上是:编写自己的排序函数.Boo.):
很遗憾,因为它不受支持,下面是我为它编写的一个函数:
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;
}
可能重复的