如何实现这一点:在同一日期对结果进行排序

时间:2017-10-10 12:37:31

标签: php laravel

我正在努力实现这样的目标:
enter image description here

我正在使用Laravel,例如显示结果我会在数组上做一个foreach并显示标题,正文等。 实施例

@foreach($resArray as $res)
    {{$res->Title}}
@endforeach

这将显示数组中每个结果的标题,我也有$res->startDate中的日期,但我不确定如何在特定日期下列出具有相同日期的每个结果。 你可能没理解......

例如,如果我有两个来自10/07/2017的通知和一个来自11/07/2017的通知,则会显示为:

10/07/2017
- notification 1
- notification 2

11/07/2017
- notification

我正在考虑if语句,但是什么声明 if($res->startDate)这也不起作用,我想将它们存储在数组中,例如日期11/07/2017数组并显示那些数组,但这甚至可以工作......

无法从谷歌找到太多,因为我不太确定如何在一个好的maneer google这个。

编辑1

我试过这样做:

$notifResult = notifications::where('userID', '=', $userID)->select('*')->groupBy(['date'])->get();
        dd($notifResult);

但是它不起作用,首先,我在数据库中有3个结果,它只有2个它们甚至没有按日期对它们进行分组,之前列出的两个结果来自不同的日子。 ..

enter image description here

编辑2

我加入了Array,这就是我所拥有的: enter image description here

但是,它只选择了两个结果......

2 个答案:

答案 0 :(得分:0)

一个天真但简单的解决方案是按开始日期对结果进行排序,然后在foreach检查中检查上一个日期(存储在temp var中)是否与当前日期不同,如果为true则显示新日期。

$prevDate = '';

@foreach($resArray as $res)
    @if($prevDate != '' && $prevDate != $res->startDate) {
        //do sth to break the html and display the new date
    @endif

    {{$res->Title}}
    {{$prevDate = $res->startDate;}}
@endforeach

答案 1 :(得分:0)

如果我理解你的问题,你必须使用分组

$collection = collect([
    ['date' => '10/07/2017', 'title' => 'notification 1'],
    ['date' => '10/07/2017', 'title' => 'notification 2'],
    ['date' => '11/07/2017', 'title' => 'notification'],
]);

$grouped = $collection->groupBy('date');

$grouped->toArray();
dd($grouped);

enter image description here