Как сделать следующее с коллекции 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 = array_keys($input); //$input->keys();
foreach ($keys as $key) {
$output[$key] = $input->pluck($key)->unique();
}
Спасибо, Фелиппе, но я получил это с помощью простого php. Отдельно для использования отваги и уникальности. Мне было интересно, есть ли в laravel метод для создания этого в одной строке. $ collection-> groupBy (что-то) -> unique (something). Но спасибо за ваше время
Да, это очень впечатляет, Фелиппе, спасибо .. Я отредактировал свой пост после твоего ответа. Что делать, если вы не знаете ключей. Но я понял. Спасибо друг