题
我有一个示例数组:
$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
.
不隶属于 StackOverflow