如果我使用数组并且回调返回0,那么元素就会反转。
<?php
$a = array("1", "2", "3");
print_r($a);
function nosort($a, $b){
return 0;
}
uasort($a, "nosort");
print_r($a);
结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[2] => 3
[1] => 2
[0] => 1
)
为什么会这样? 0不是切换元素不是更合理的默认值吗?
答案 0 :(得分:2)
来自uasort
的文档:
注意强>
如果两个成员比较相等,则它们在排序数组中的相对顺序是未定义的。
您已将数组中的所有条目定义为具有相同的比较,因此PHP可以对它们执行任何操作。它以相反的顺序出现的事实可能只是巧合 在任何情况下都不应该依赖于这种行为,因为它是未定义的。
答案 1 :(得分:0)
uasort()
不是一种稳定的排序 - 也就是说,不能保证两个相等的元素(比较返回0的元素)将保留其顺序。他们可能,他们可能没有。他们碰巧在这里被颠倒的事实也不是你应该依赖的东西。
如果您需要,uasort()
文档包含uasort()
的稳定变体的an example。