如何使用 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 集合来实现这一点?
按多维键分组,具有唯一值。
干杯!
使用普通 PHP,您可以使用 array_column 和 array_unique:
$output = [
'name' => array_unique(array_column($input, 'name')),
'age' => array_unique(array_column($input, 'age')),
];
$output = [
'name' => $input->pluck('name')->unique(),
'age' => $input->pluck('age')->unique(),
];
如果您不知道按键,请使用 array_keys 或 keys(),获取按键,然后重复上述过程:
$keys = array_keys($input); //$input->keys();
foreach ($keys as $key) {
$output[$key] = $input->pluck($key)->unique();
}
要按所有遇到的列动态分组,然后删除单个方法链中每个组中的重复值,我想出了这个:
代码:(PHPize演示)
var_export(
collect($input)
->reduce(fn($result, $row) => $result->mergeRecursive($row), collect()) // form groups
->map(fn($row) => collect($row)->unique()->values()) // remove dupes, then re-index
->toArray()
);