我正在使用 Laravel Http 客户端并从外部 API 获取数据。 当我创建计划并将其发布到 API 时,我得到如下结果:
[
{
"id": "321322",
"date": "2024-03-21",
"serviceTimeRange": {
"startHour": "10:00",
"endHour": "12:00",
"id": "212367",
"service": {
"id": "333444",
"serviceCode": "press"
}
}
},
{
"id": "565332",
"date": "2024-03-21",
"serviceTimeRange": {
"startHour": "12:00",
"endHour": "14:00",
"id": "234892",
"service": {
"id": "333444",
"serviceCode": "press"
}
}
},
{
"id": "785434",
"date": "2024-03-22",
"serviceTimeRange": {
"startHour": "10:00",
"endHour": "12:00",
"id": "993218",
"service": {
"id": "777888",
"serviceCode": "conference"
}
}
}
]
从结果中可以看到,第一条和第二条记录中,service->id具有相同的id(333444)。
如果我这样循环:
@foreach($schedules as $schedule)
<tr>
<td> {{ date('d-M-Y', strtotime($schedule->date)) }} </td>
<td> {{ $schedule->serviceTimeRange->service->serviceCode }} </td>
</tr>
@endforeach
我得到结果了:
21-Mar-2024
press
21-Mar-2024
press
22-Mar-2024
conference
问题是:我怎样才能将具有相同日期的结果合并起来,如下所示:
21-Mar-2024
press
2 //where 2 is the count of the serviceTimeRange hours
22-Mar-2024
conference
1 //where 1 is the count of the serviceTimeRange hours
您可以通过按日期对日程进行分组,然后计算每个日期的
serviceTimeRange
数量来实现此目的。首先,将计划数组转换为 Laravel 集合。
$schedules = collect($schedules);
然后,按日期对日程进行分组。
$grouped = $schedules->groupBy('date');
现在,您可以在视图中循环浏览分组的时间表,并计算每个日期的
serviceTimeRange
数量。
@foreach($grouped as $date => $schedules)
<tr>
<td> {{ date('d-M-Y', strtotime($date)) }} </td>
<td> {{ $schedules->first()->serviceTimeRange->service->serviceCode }} </td>
<td> {{ $schedules->count() }} </td>
</tr>
@endforeach