我目前正在将一个项目从php5.6迁移到php7.1。大多数进展顺利,但我只是在一个测试中碰壁。usort差异php7.1 vs php5.6
函数usort在两个版本上都没有相同的行为,并且似乎没有记录(这不是说两个值是等于,然后订单是未定义的)。在我的测试案例中,返回的数组顺序被颠倒过来。
这里是对问题的再现。请注意,我返回-1所有简化的时候(我聚焦PHP5.6和7这里之间的差异)
代码运行在两个版本:
$a = [['value' => 1, 'toto' => 'toto'], ['value' => 1, 'toto' => null]];
usort($a, function ($a, $b) { return -1;});
print_r($a);
结果在PHP 5.6:
Array
(
[0] => Array
(
[value] => 1
[toto] =>
)
[1] => Array
(
[value] => 1
[toto] => toto
)
)
PHP 7.1
Array
(
[0] => Array
(
[value] => 1
[toto] => toto
)
[1] => Array
(
[value] => 1
[toto] =>
)
)
这是因为你的回调函数代码'return -1;'是非常没有意义的,完全服从条目的比较顺序.....你不应该做出这样的假设,而应该使用一个实际的在您的回调中比较 –
对于所有意图和目的,您的物品的订单是* undefined *;你不能指望任何特定的结果。 – deceze
你应该完全实现比较功能。 –