如果uasort回调返回0,则元素反转

时间:2014-11-13 17:04:02

标签: php sorting

如果我使用数组并且回调返回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不是切换元素不是更合理的默认值吗?

2 个答案:

答案 0 :(得分:2)

来自uasort的文档:

  

注意
  如果两个成员比较相等,则它们在排序数组中的相对顺序是未定义的。

您已将数组中的所有条目定义为具有相同的比较,因此PHP可以对它们执行任何操作。它以相反的顺序出现的事实可能只是巧合 在任何情况下都不应该依赖于这种行为,因为它是未定义的。

答案 1 :(得分:0)

uasort() 是一种稳定的排序 - 也就是说,不能保证两个相等的元素(比较返回0的元素)将保留其顺序。他们可能,他们可能没有。他们碰巧在这里被颠倒的事实也不是你应该依赖的东西。

如果您需要,uasort()文档包含uasort()的稳定变体的an example