用 Collection 重构循环 遇到这个该如何优化

如何优化这种数据结构,用于存入到数据库中

原始数据结构

[
    [
        "group"=>"A",
        "list"=>[
             ["name"=>"1"],
             ["name"=>"2"],
             ["name"=>"3"],
         ]
    ],
    [
         "group"=>"B"
         "list"=>[
             ["name"=>"4"],
             ["name"=>"5"],
             ["name"=>"6"],
         ]
    ]
]

转化后的数据结构

[
    ["group"=>"A","name"=>"1"],
    ["group"=>"A","name"=>"2"],
    ["group"=>"A","name"=>"3"],
    ["group"=>"B","name"=>"4"],
    ["group"=>"B","name"=>"5"],
    ["group"=>"B","name"=>"6"],
]
gdreamlend
$tag_collect = collect();
        collect($params)->map(function ($item) use($tag_collect){
                return collect($item['list'])->map(function($map) use($item,$tag_collect){

                    $tag_collect->push(['group'=>$item['group'], 'name' => $map['name']]);
                });
        });
xyzphp

@gdreamlend 这个方法感觉比foreach 更复杂吧。

perfectboook
$data = [
    [
        "group" => "A",
        "list" => [
            ["name" => "1"],
            ["name" => "2"],
            ["name" => "3"],
        ]
    ],
    [
        "group" => "B",
        "list" => [
            ["name" => "4"],
            ["name" => "5"],
            ["name" => "6"],
        ]
    ]
];
dd(collect($data)->flatMap(function ($data) {
    return collect($data['list'])->map(function ($item) use ($data) {
        return ['group' => $data['group'], 'name' => $item['name']];
    });
})->toArray());

其实差不多。

cnsnms
        $demo = [
            ["group"=>"A",
                "list"=>[
                    ["name"=>"1"],
                    ["name"=>"2"],
                    ["name"=>"3"],]
            ],
            ["group"=>"B",
                "list"=>[
                    ["name"=>"4"],
                    ["name"=>"5"],
                    ["name"=>"6"],]
            ]
        ];
        $middle = '';

        dd(
            collect($demo)->flatten()->map(
                function($val) use(&$middle){
                    if(is_numeric($val)) {
                        return ['name'=>$val,'group'=>$middle];
                    }else{
                        $middle = $val;
                    }
                })->reject(
                function($val){
                    return !is_array($val);
                }
            )
        );