我有一个示例数组:
$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
);你看到了吗?具有相同值的键是反向排序的。为什么?
发布于 2010-09-08 18:14:05
对于相等的值,不能期望一定的排序顺序。从PHP manual on Sorting Arrays
如果这些排序函数中的任何一个将两个成员求值为相等,则顺序未定义(排序不稳定)。
发布于 2010-09-08 18:12:23
“为什么”是另一个问题。
但它确实做到了你想要的,不是吗?
键顺序未确定。
如果你想要键的特定顺序,你应该在练习条件中说明它
发布于 2010-09-08 19:08:58
http://en.wikipedia.org/wiki/Sorting_algorithm#Stability
简而言之,确保已经排序的键的顺序保持不变将耗费计算时间(无论是谁在PHP中设计了这个函数,都认为不值得这么做)
https://stackoverflow.com/questions/3666624
复制相似问题