Коллекции Laravel: многомерный массив, группировка по ключам и уникальные значения - PullRequest
0 голосов
/ 18 декабря 2018

Как можно сделать следующее с коллекциями ларавеллы

Мы получили этот массив: давайте предположим, что мы заранее не знаем мультиключи

$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 в одну строку?

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

Cheers!

1 Ответ

0 голосов
/ 18 декабря 2018

С простым PHP вы можете использовать array_column и array_unique :

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

С коллекцией вы можете использовать pluck и уникальный :

$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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...