将数组值映射到项目集合

Pao*_*der 5 laravel laravel-5.7

如何使用 laravel 集合优雅地执行以下操作?

将$baseMap的值映射 为集合的键。

底图:

$baseMap = [
            'name' => 'new_name',
            'year' => 'new_year',
        ];
Run Code Online (Sandbox Code Playgroud)

集合:

 $items = collect([
            [
                'name' => 'name1',
                'year' => '1000',
                'not_in_basemap' => 'foo'
            ],
            [
                'name' => 'name2',
                'year' => '2000',
                'not_in_basemap' => 'foo'
            ],
            //...
        ]);
Run Code Online (Sandbox Code Playgroud)

最终结果:

$result =[
            [
                'new_name' => 'name1',
                'new_year' => '1000',

            ],
            [
                'new_name'=> 'name2',
                'new_year' => '2000',

            ],
        ];
Run Code Online (Sandbox Code Playgroud)

我知道如何用普通的 php 来做到这一点,只是想知道一个好的集合版本会是什么样。谢谢!

Pao*_*der 2

感谢 @vivek_23 和 @IndianCoding 给了我想法,我最终得到了以下结果:我做了一个小编辑以确保映射和项目键对齐。所以你不必担心错位,一切都在 laravel 集合中!


$baseMap = collect($baseMap)->sortKeys();

$result = $items->map(function ($item) use ($baseMap) {

            return $baseMap->values()
                ->combine(
                    collect($item)->sortKeys()->intersectByKeys($baseMap)
                )
                ->all();
        });
Run Code Online (Sandbox Code Playgroud)