我有一个我希望优化的过程:我有以下数组$journeys = [ [ 'journey_id' => '123', 'stops' => [ 'lon' => '123123123', 'lat' => '123123123', 'stop_name' => 'foobar st' ] ... ] ...] 该数组包含 1,000 条行程,每个行程在停靠点数组中包含大约 40-50 个停靠点。我想要做的是删除嵌套,所以我最终得到这样的结果:'stops' => [ 'journey_id' => '123', 'lon' => '123123123', 'lat' => '123123123', 'stop_name' => 'foobar st']目前我能想到的唯一方法是循环遍历数组中的每个项目,然后每次停止并创建一个新数组。像这样:$stops = [];foreach($journeys as $journey){ foreach($journey['stops'] as $stop){ array_push($stops, [ 'journey_id' => $journey['journey_id'], 'lon' => '123123123', 'lat' => '123123123', 'stop_name' => 'foobar st' ]) } }这个过程很慢!有谁知道我可以更快地做到这一点?我使用 Laravel,所以集合是可用的,尽管我尝试过,但似乎并没有更快。
2 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
你可以收集它,然后在上面映射,像这样:
$stops = collect($journeys)->map(function($v, $k){
return $v['stops'];
});
您还可以使用 array_map,以防收集不适合您。
汪汪一只猫
TA贡献1898条经验 获得超8个赞
您可以通过使用添加$journeys到集合并使用->map()集合方法来映射应如何返回数据来实现此目的:
$journeys = collect($journeys)->map(function ($journey, $key) {
$journey['stops']['journey_id'] = $journey['journey_id'];
unset($journey['journey_id']);
return $journey;
})->all();
在这里,我们创建了一个旅程集合。我们遍历每个旅程,添加journey_id到stops数组中,并取消设置原始journey_id.
然后使用->all().
注意:如果使用 laravel eloquent 模型,请使用$journeys->map(...)它,因为它已经是一个集合实例。
- 2 回答
- 0 关注
- 172 浏览
添加回答
举报
0/150
提交
取消