如何从 Laravel PHP 中的数组中删除一层嵌套

我有一个我希望优化的过程:我有以下数组


$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,所以集合是可用的,尽管我尝试过,但似乎并没有更快。


莫回无
浏览 173回答 2
2回答

慕姐8265434

你可以收集它,然后在上面映射,像这样:$stops = collect($journeys)->map(function($v, $k){                return $v['stops'];         }); 您还可以使用 array_map,以防收集不适合您。

汪汪一只猫

您可以通过使用添加$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(...)它,因为它已经是一个集合实例。
打开App,查看更多内容
随时随地看视频慕课网APP