Php 重组Laravel中的集合项目

Php 重组Laravel中的集合项目,php,laravel,collections,laravel-collection,Php,Laravel,Collections,Laravel Collection,我收集了以下800到4000件物品: [ { 日期:2017年5月26日, 出发时间:14:50:00, 抵达时间:09:20:02, 出发地点身份证号码:16 }, { 日期:2017年5月26日, 出发时间:15:20:00, 到达时间:15:20:00, 出发地点:15 }, ... ] 我需要合并始终将集合中的两项合并为一项。因此,合并后的10个项目的集合是5个项目的集合,具有以下结构 [ { 日期:2017年5月26日, 出发时间:14:50:00,//从第一项出发 到达时间:15:2

我收集了以下800到4000件物品:

[ { 日期:2017年5月26日, 出发时间:14:50:00, 抵达时间:09:20:02, 出发地点身份证号码:16 }, { 日期:2017年5月26日, 出发时间:15:20:00, 到达时间:15:20:00, 出发地点:15 }, ... ] 我需要合并始终将集合中的两项合并为一项。因此,合并后的10个项目的集合是5个项目的集合,具有以下结构

[ { 日期:2017年5月26日, 出发时间:14:50:00,//从第一项出发 到达时间:15:20:00,//从第二项开始 出发地点id:16,//从第一项出发 到达地点id:15//第二项 }, ... ] 如您所见,我需要将两个连续项中的数据合并到一个

我已经尝试了两个扩展使用Laravels功能,但不能真正实现我想要的


有什么线索吗?

在我看来,如果你只有两个项目,你应该创建一个类,将你的两个项目合并成一个,就像你所做的那样


集合用于处理项目集合,因此1到N个项目不仅仅是两个。

您可以使用laravel集合来解决此问题

调用此函数以格式化数据


根据@Vikash提供的使用chunk的技巧和一些研究,我提出了以下最适合我需要的解决方案:

公共函数转换:\illumb\Support\Collection { /**@var\light\Database\elounce\Collection$Collection*/ $collection=$this->cruise->where'line_id',$lineId->get; 返回$collection->chunk2->mapfunction$chunk{ /**@var集合$chunk*/ 返回[ “日期”=>$chunk->first->date, “下游”=>$chunk->last->出发地点\u id<$this->出发地点\u id, “出发时间”=>$chunk->first->出发时间, “到达时间”=>$chunk->last->execast\u time, '出发地点\u id'=>$chunk->first->出发地点\u id, '到达地点\u id'=>$chunk->last->execution\u地点\u id, ]; }; }
我把它放到了一个存储库中,这是一个很好的逻辑解耦方法。它利用了集合,而不是处理我明确希望避免的数组。

如果没有任何其他方法没有帮助,那么您可以通过转换为数组、执行操作以及将结果数组转换为集合来实现。但我希望有人能在没有这个步骤的情况下发布解决方案。完全正确@Autista_z。。我也在寻找不使用阵列的解决方案。希望有一个。这个藏品有800到4000件。这只是我帖子中的一个例子。哦,好吧!为此,我处理了一个类似的案例:为车队管理公司总结道路事件。我在集合对象周围创建一个装饰器来操纵它,可以考虑。我将研究一下decorators——我一直在寻找一种解决方案,在创建集合时可以重新构造项目,从而避免集合的第二次接触。我希望避免使用数组。你知道如何只使用集合并返回集合而不使用数组吗?你可以返回json,return response->json$results;您也可以阅读文档,它将仅返回数组,您可以通过如上所述的转换再次返回json。我已更改了答案,请检查现在返回的集合,请检查并向上投票,如果它有助于您:
 public function formatCollection($collection)
 {
  $results = [];
     foreach (collect($collection)->chunk(2) as $chunk)
     {
         $results[] = [
             'date' => $chunk[0]['date'],
             'departure_time' => $chunk[0]['departure_time'],
             'arrival_time' => $chunk[1]['arrival_time'],
             'departure_place_id'=> $chunk[0]['departure_place_id'],
             'arrival_place_id' => $chunk[1]['departure_place_id']
         ];
     }

    return collect($results);
 }