提问人:Singleton 提问时间:1/12/2023 更新时间:4/2/2023 访问量:1189
不推荐使用的功能: usort():不推荐从比较函数返回布尔值,返回小于、等于或大于零的整数
Deprecated Functionality: usort(): Returning bool from comparison function is deprecated, return an integer less than, equal to, or greater than zero
问:
在下面,我的一些代码遇到了一个小问题。
// sorting
$sortField = $this->sortField;
$sortDir = $this->sortDir;
usort($data, function ($a, $b) use ($sortField, $sortDir) {
if ($sortDir == "asc") {
return $a[$sortField] > $b[$sortField];
} else {
return $a[$sortField] < $b[$sortField];
}
});
这里对我需要改变什么有点困惑。
我在另一个线程中读到了这一点。
PHP 8 引入了稳定排序 RFC,这(顾名思义)意味着 PHP 中的所有排序功能现在都是“稳定的”。
飞船运算符用于比较两个表达式。当 $a 分别小于、等于或大于 $b 时,它返回 -1、0 或 1。比较是根据 PHP 通常的类型比较规则执行的。
那么这是否意味着我需要在返回中添加宇宙飞船操作员:
return $a[$sortField] <=> $b[$sortField];
} else {
return $a[$sortField] <=> $b[$sortField];
}
就这样?
答:
1赞
saschoff
4/2/2023
#1
就我个人而言,我没有使用过该运算符,但是是的,因为您需要返回值为 1、0 或 -1。但是您需要反转左右,以便它根据排序顺序正确运行。这样:
if ($sortDir == "asc") {
return $a[$sortField] <=> $b[$sortField];
} else {
return $b[$sortField] <=> $a[$sortField];
}
我刚刚在一个较旧的网站上收到这个错误,错误指出该功能已“弃用”哈!它导致 api 调用完全失败,所以我认为我们已经过去了“弃用”,你不觉得吗?:-)
另外,我可能把你的逻辑弄倒了,但我认为你应该明白。
希望能有所帮助。
评论