繁体   English   中英

错误结果 usort PHP 8

[英]Wrong result usort PHP 8

我有以下代码应该将“BMW”排序到第一个 position:

$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 中的一个讨厌的错误,还是我需要更改我的代码?

如果你有错误的回调 function,你会得到错误的结果。 它应该是:

$cars = ['Toyota', 'Volvo', 'BMW'];
usort($cars, function ($a, $b) { return $a <=> $b; });
var_export($cars);

注意第二个参数$b以及它是如何使用的。

请参阅: usort()和此处的示例: https://3v4l.org/X1DVU

您看到的旧 PHP 版本的差异确实是由 PHP 8 切换到黑貂排序引起的,但这与您的情况无关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM