首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP组合arsort和ksort

PHP组合arsort和ksort
EN

Stack Overflow用户
提问于 2011-11-28 14:08:46
回答 2查看 1.4K关注 0票数 2

我尝试按值降序keys (arsort)对数组进行排序,但如果值相等,我希望它也按键升序(ksort)排序。

我一直在尝试这样做:

代码语言:javascript
复制
ksort($array);
arsort($array);

但是ksort并没有被保留,并且在arsort之后,密钥再次变得混乱。

例如,如果我的输入数组在:

代码语言:javascript
复制
$array[0] = 4;
$array[1] = 2;
$array[2] = 3;
$array[3] = 1;
$array[4] = 4;

我想对它进行排序,这样它就会像这样结束:

代码语言:javascript
复制
$array[0] = 4;
$array[4] = 4;
$array[2] = 3;
$array[1] = 2;
$array[3] = 1;

不是这样的:

代码语言:javascript
复制
$array[4] = 4;
$array[0] = 4;
$array[2] = 3;
$array[1] = 2;
$array[3] = 1;

但之前的密钥顺序似乎被arsort打乱了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2011-11-28 14:21:16

这很遗憾,因为它不受支持,下面是我为它编写的一个函数:

代码语言:javascript
复制
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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8292085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档