我有以下Laravel集合,包含800到4000个项目:
[
{
"date": "2017-05-26",
"departure_time": "14:50:00",
"arrival_time": "09:20:02",
"departure_place_id": 16
},
{
"date": "2017-05-26",
"departure_time": "15:20:00",
"arrival_time": "15:20:00",
"departure_place_id": 15
},
...
]
我需要合并始终将集合中的两个项合并为一个。因此,合并后的10个项目的集合是具有以下结构的5个项目的集合。
[
{
"date": "2017-05-26",
"departure_time": "14:50:00", // from first item
"arrival_time": "15:20:00", // from second item
"departure_place_id": 16, // from first item
"arrival_place_id": 15 // from second item
},
...
]
如您所见,我需要将两个连续项目中的数据合并为一个。
我已经尝试了两个延伸使用Laravels custom collection功能,但无法实现我想要的功能。
有任何线索吗?
答案 0 :(得分:1)
答案 1 :(得分:0)
IMO,如果你只有两个项目,你应该创建一个类,它将合并"你和你的两件物品一样。
收集用于处理项目集合,因此1到N个项目不仅仅是两个。
答案 2 :(得分:0)
在@Vikash提示使用chunk()
和一些研究之后,我提出了以下最符合我需求的解决方案:
public function convert() : \Illuminate\Support\Collection
{
/** @var \Illuminate\Database\Eloquent\Collection $collection */
$collection = $this->cruise->where('line_id', $lineId)->get();
return $collection->chunk(2)->map(function ($chunk) {
/** @var Collection $chunk */
return [
'date' => $chunk->first()->date,
'downriver' => $chunk->last()->departure_place_id < $this->departure_place_id,
'departure_time' => $chunk->first()->departure_time,
'arrival_time' => $chunk->last()->departure_time,
'departure_place_id' => $chunk->first()->departure_place_id,
'arrival_place_id' => $chunk->last()->departure_place_id,
];
});
}
我将它放入存储库,这是一种解耦逻辑的好方法。它利用collection
functions而不是处理我绝对想要避免的数组。