我目前正在將一個項目從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
你應該完全實現比較功能。 –