PHP 7中的usort将相等的元素添加到数组末尾,而在PHP 5中则添加到开头。

3

看起来PHP 7在处理usort函数中相等结果的方式上进行了未记录的更改。

$myArray = array(1, 2, 3);
usort($myArray, function($a, $b) { return 0; });
print_r($myArray);

// PHP 5:
Array
(
    [0] => 3
    [1] => 2
    [2] => 1
)

// PHP 7
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)

在 PHP 7 中,usort 函数会将相等的值添加到数组末尾,而 PHP 5 则将它们添加到开头。我没有找到任何关于这种行为的说明。
是否有一种方法可以强制使用 PHP 5 的行为?

3
我认为 usort 从来没有保证过是稳定的,也没有定义相等元素的排序顺序。如果你依赖于未定义的行为,你需要改变你的方法。 - deceze
那么在 PHP 5 中它是未记录的行为,在 PHP 7 中仍然是吗? - Dan Blows
4
@Blowski:这明确记录为未定义。 - BoltClock
1个回答

9

来自PHP文档:

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

依赖未定义的行为是一个坏主意。没有办法改变这种行为(除非使项目不相等)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接