我有以下代碼應該將“BMW”排序到第一個位置:
$cars=['Toyota','Volvo','BMW'];
usort($cars,function($v){return $v <=> 'BMW';});
var_export($cars);
PHP7(和更小)的結果是正確的:
array ( 0 => 'BMW', 1 => 'Volvo', 2 => 'Toyota', )
據我了解,PHP8 的結果是錯誤的。
array (0 => 'Volvo', 1 => 'BMW', 2 => 'Toyota',)
演示:https ://3v4l.org/8SCXk
這不取決于飛船操作員。這個似乎作業正常。原因必須在于排序的行為。
var_dump(
'Volvo' <=> 'BMW',
'BMW' <=> 'Volvo',
'BMW' <=> 'Toyota',
'Toyota' <=> 'BMW',
'BMW' <=> 'BMW'
);
演示:https ://3v4l.org/UaKrM
我的問題:這是 PHP8 中的一個討厭的錯誤,還是我需要更改我的代碼?
uj5u.com熱心網友回復:
如果你有錯誤的回呼函式,你會得到錯誤的結果。它應該是:
$cars = ['Toyota', 'Volvo', 'BMW'];
usort($cars, function ($a, $b) { return $a <=> $b; });
var_export($cars);
注意第二個引數$b
及其使用方式。
請參閱:usort()和此處的示例:https ://3v4l.org/X1DVU
您看到的舊 PHP 版本的差異確實是由 PHP 8 切換到黑貂排序引起的,但這與您的情況無關。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/506626.html
下一篇:如何將排序表索引作為字串回傳?