Коллекции Laravel: многомерный массив, группировка по ключам и уникальные значения

Как можно сделать следующее с коллекции 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 в одной строке?

Группировка по многомерным ключам с уникальными значениями.

Ура!

-1

Решение

С простым 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 = array_keys($input); //$input->keys();

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector