我有一个集合,我在其中按降序对“ total”值进行排序。当“总计”值相同时,我必须按降序对项目进行排序。
$collection->sortByDesc('total');
当总数相等时,要按降序对元素进行排序,我使用了sort
和sortByDesc
,但元素仍未排序。
//First method
$collection->sortByDesc('created_at')->sortByDesc('total');
//Second method
$collection->->sort(function($a, $b){
if($a->total === $b->total)
{
return strtotime($a->created_at) - strtotime($b->created_at);
}
})->sortByDesc('total');
这两个选项都不适合我,但我仍然有相同的结果:
结果应为以下(当总值相等时,按下降日期排序的项目):
我在做什么错? Cheerz。
PS:因为“ total”值是应该优先考虑的值,所以它不能帮助我按“ total”排序,然后按“ date”排序。
答案 0 :(得分:1)
sortByDesc
将覆盖您在sort
函数中所做的排序。
此外,strtotime($a->created_at) - strtotime($b->created_at)
将按升序而不是降序对日期进行排序。
以下内容应为您提供帮助:
$collection->sort(function ($a, $b) {
if ($a->total === $b->total) {
return strtotime($a->created_at) < strtotime($b->created_at);
}
return $a->total < $b->total;
});
最后,假设created_at
和updated_at
是Carbon
实例,则不需要使用strtotime
:
$a->created_at < $b->created_at