PHP的asort无法正常工作?

时间:2010-09-08 10:09:07

标签: php asort

我有一个示例数组:

$a = array(
    5   => 35,
    16  => 22,
    7   => 22,
    3   => 22,
    11  => 22,
    9   => 27,
);

我希望按值排序并记住它的键。 我预期的结果是:

$a = array(
    16  => 22,
    7   => 22,
    3   => 22,
    11  => 22,
    9   => 27,
    5   => 35,
);

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

asort($a);

但不是 - 它不只是将5 => 35移动到数组的末尾。 它将我的数组改为:

$a = array(
    11  => 22,
    3   => 22,
    7   => 22,
    16  => 22,
    9   => 27,
    5   => 35
);
你知道吗?具有相同值的键是反向排序的。为什么?

4 个答案:

答案 0 :(得分:10)

您不能指望某个排序顺序为相等的值。来自PHP manual on Sorting Arrays

  

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

答案 1 :(得分:2)

“为什么”是另一个问题 但它实际上做了你要求的,不是吗? 关键顺序未确定 如果您想要某些键的顺序,您应该在运动条件中说明它

答案 2 :(得分:2)

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

简而言之,确保已经排序的键的顺序保持不变将花费计算时间(并且无论是谁在PHP设计该功能都认为它不值得)

答案 3 :(得分:1)

根据排序算法,它可能以另一种方式开始排序,而不仅仅是检测它应该只移动那一对。但它最终得到了一个有效排序的数组维护键/值。他们只看起来交换,因为你有4个键值为22