首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP的asort不能正常工作吗?

PHP的asort不能正常工作吗?
EN

Stack Overflow用户
提问于 2010-09-08 18:09:07
回答 4查看 3.4K关注 0票数 3

我有一个示例数组:

代码语言:javascript
复制
$a = array(
    5   => 35,
    16  => 22,
    7   => 22,
    3   => 22,
    11  => 22,
    9   => 27,
);

我想按值对它进行排序,并记住它的键。我所期望的结果是:

代码语言:javascript
复制
$a = array(
    16  => 22,
    7   => 22,
    3   => 22,
    11  => 22,
    9   => 27,
    5   => 35,
);

所以我的第一个想法是:asort!好的,我做到了

代码语言:javascript
复制
asort($a);

但事实并非如此--它并没有将5 => 35移到数组的末尾。它将我的数组更改为:

代码语言:javascript
复制
$a = array(
    11  => 22,
    3   => 22,
    7   => 22,
    16  => 22,
    9   => 27,
    5   => 35
);

你看到了吗?具有相同值的键是反向排序的。为什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-08 18:14:05

对于相等的值,不能期望一定的排序顺序。从PHP manual on Sorting Arrays

如果这些排序函数中的任何一个将两个成员求值为相等,则顺序未定义(排序不稳定)。

票数 11
EN

Stack Overflow用户

发布于 2010-09-08 18:12:23

“为什么”是另一个问题。

但它确实做到了你想要的,不是吗?

键顺序未确定。

如果你想要键的特定顺序,你应该在练习条件中说明它

票数 2
EN

Stack Overflow用户

发布于 2010-09-08 19:08:58

http://en.wikipedia.org/wiki/Sorting_algorithm#Stability

简而言之,确保已经排序的键的顺序保持不变将耗费计算时间(无论是谁在PHP中设计了这个函数,都认为不值得这么做)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3666624

复制
相关文章

相似问题

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