我似乎无法对 laravel 集合进行排序,因此 empty
/null
数据最终会排在最后。 (对 usort 有点困惑)
我几乎只有一堆 times
/timestamps
需要订购。某些行可能没有该列。
我希望数据显示在 ASC
/ascending
而 empty/null
数据最后显示。
$collection->sortBy('timestamp')
排序很好,但不知道如何处理空字段。
表格是这样的。
$data = $data->sort(function($a, $b) use ($sortBy) {
if ($a->{$sortBy} and $b->{$sortBy}) return 0;
return ($a->{$sortBy} > $b->{$sortBy}) ? -1 : 1;
});
我从互联网上尝试的随机代码,我无法正常工作。
$sortBy
包含要排序的字段名称(因为它可能会更改)
错误的代码处理空/空数据,但它是无序的。
最佳答案
必须使用带有闭包的 sort()。下面将对时间戳 ASC 进行排序,最后为 NULL。
$sorted = $collection->sort(function ($a, $b) {
if (!$a->timestamp) {
return !$b->timestamp ? 0 : 1;
}
if (!$b->timestamp) {
return -1;
}
if ($a->timestamp == $b->timestamp) {
return 0;
}
return $a->timestamp < $b->timestamp ? -1 : 1;
});
关于php - 通过将 null/empty 最后留空来对 laravel 集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43449707/