我有一个示例数组:

$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
);

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

有帮助吗?

解决方案

您不能指望相等值的某个分类顺序。来自 PHP手册在排序阵列上:

如果这些类型的功能中的任何一个将两个成员评估为平等,则该顺序是不确定的(排序不稳定)。

其他提示

“为什么”是另一个问题。
但这实际上做了您的要求,不是吗?
关键顺序尚未确定。
如果您想要一定的钥匙,则应在运动条件下陈述

http://en.wikipedia.org/wiki/sorting_algorithm#stability

简而言之,请确保已经分类的键的顺序保持不变将花费计算时间(并且在PHP上设计该功能的人决定不值得)

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top