php - 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 集合?
按具有唯一值的多维键分组。
干杯!
解决方案
使用纯 PHP,您可以使用array_column和array_unique:
$output = [
'name' => array_unique(array_column($input, 'name')),
'age' => array_unique(array_column($input, 'age')),
];
通过 collection 您可以使用pluck和unique:
$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();
}
推荐阅读
- django - 如何整合 Django(不同模型)数据库并存储在集中位置
- c++ - 如何一次打印出数组中的多个元素?(C++)
- javascript - Javascript:在输入中重新映射键盘
- r - se.fit 究竟代表什么?我们如何手动计算它?
- python - MapReduce 错误:ValueError: no enough values to unpack (expected 2, got 1)
- javascript - Javascript中的最大值与条件
- javascript - 使用键和值将字符串数组转换为数组对象
- python - 获取 PIL 中所有可用字体的列表
- r - 我需要在 R 中记录我的模型。但是,我不断收到相同的错误
- python - 导入 numpy 模块时出现 Python 错误