PHP Laravel 从 API 过滤数组

问题描述 投票:0回答:1

我正在使用 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
php arrays laravel
1个回答
1
投票

您可以通过按日期对日程进行分组,然后计算每个日期的

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
© www.soinside.com 2019 - 2024. All rights reserved.