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;
    }
可能重复的