不推荐使用的功能: usort():不推荐从比较函数返回布尔值,返回小于、等于或大于零的整数

Deprecated Functionality: usort(): Returning bool from comparison function is deprecated, return an integer less than, equal to, or greater than zero

提问人:Singleton 提问时间:1/12/2023 更新时间:4/2/2023 访问量:1189

问:

在下面,我的一些代码遇到了一个小问题。

// 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];
    }

就这样?

返回 php-8 usort 宇宙飞船操作员

评论


答:

1赞 saschoff 4/2/2023 #1

就我个人而言,我没有使用过该运算符,但是是的,因为您需要返回值为 1、0 或 -1。但是您需要反转左右,以便它根据排序顺序正确运行。这样:

if ($sortDir == "asc") {
    return $a[$sortField] <=> $b[$sortField];
} else {
    return $b[$sortField] <=> $a[$sortField];
}

我刚刚在一个较旧的网站上收到这个错误,错误指出该功能已“弃用”哈!它导致 api 调用完全失败,所以我认为我们已经过去了“弃用”,你不觉得吗?:-)

另外,我可能把你的逻辑弄倒了,但我认为你应该明白。

希望能有所帮助。