有没有人知道使用PHP中的usort函数对对象执行自然顺序排序的功能是什么。
让我们说对象($ obj-> Rate)在
中有一系列值$obj->10
$obj->1
$obj->2
$obj->20
$obj->22
我正在尝试使用sort函数返回
$obj->22
$obj->20
$obj->10
$obj->2
$obj->1
作为我目前的标准排序功能
function MySort($a, $b)
{
if ($a->Rate == $b->Rate)
{
return 0;
}
return ($a->Rate < $b->Rate) ? -1 : 1;
}
正在返回
$obj->1
$obj->10
$obj->2
$obj->20
$obj->22
答案 0 :(得分:16)
使用strnatcmp作为比较功能。例如它就像
一样简单function mysort($a, $b) {
return strnatcmp($a->rate, $b->rate);
}
答案 1 :(得分:0)
有几种方法可以按Rate
属性以数字和降序进行排序。
以下是根据您的输入进行的演示:
$objects = [
(object)['Rate' => '10'],
(object)['Rate' => '1'],
(object)['Rate' => '2'],
(object)['Rate' => '20'],
(object)['Rate' => '22']
];
array_multisort()清晰而富有表现力:(Demo)
array_multisort(array_column($objects, 'Rate'), SORT_DESC, SORT_NUMERIC, $objects);
usort():(Demo)
usort($objects, function($a, $b) {
return $b->Rate <=> $a->Rate;
});
usort(),具有PHP7.4中的箭头函数语法:(Demo)
usort($objects, fn($a, $b) => $b->Rate <=> $a->Rate);
PHP的太空船运算符(<=>
)将自动将两个数字字符串视为数字-不需要额外的/迭代的函数调用或标志。