首页 > 解决方案 > Laravel Collections:多维数组,按键和唯一值分组

问题描述

如何使用laravel 集合执行以下操作

我们得到了这个数组:假设我们事先不知道多键

$input =[
            ['name' =>'John McClane','age'=>'40' ],
            ['name' =>'John McClane','age'=>'50' ],
            ['name' =>'Hans Gruber','age'=>'40' ],
            ['name' =>'Hans Gruber','age'=>'50' ],
            ['name' =>'Holly McClane','age'=>'20' ],
            ['name' =>'Holly McClane','age'=>'49' ],
        ];


$output =[
            'name' => [
                'John McClane',
                'Hans Gruber',
                'Holly McClane'
            ],
            'age' =>[
                '40',
                '50',
                '20',
                '49'
            ]
        ];

更新:@Felippe Duarte 添加了 PHP 普通版本,说明如何做到这一点。

 $output =[];
 foreach($input as $arr){
            $keys = array_keys($arr);
            foreach ($keys as $key) {
                $output[$key] =  array_unique(array_column($input, $key));
            }
        }

只是替换array_unique(array_column($input, $key));
不是$input->pluck($key)->toArray(); 很有趣。

我想知道的是,有没有一种巧妙的方法可以完全在一行中使用 laravel 集合?

按具有唯一值的多维键分组。

干杯!

标签: phplaravellaravel-5

解决方案


使用纯 PHP,您可以使用array_columnarray_unique

$output = [
    'name' => array_unique(array_column($input, 'name')),
    'age' => array_unique(array_column($input, 'age')),
];

通过 collection 您可以使用pluckunique

$output = [
    'name' => $input->pluck('name')->unique(),
    'age' => $input->pluck('age')->unique(),
];

如果您不知道密钥,请使用array_keyskeys(),获取密钥然后重复上述过程:

$keys = array_keys($input); //$input->keys();

foreach ($keys as $key) {
    $output[$key] = $input->pluck($key)->unique();
}

推荐阅读