Laravel массив сгруппировать и объединить каждую группу - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть такой массив, как я могу сгруппировать по date и объединить каждую группу?

$input =  [
    [
        'date' => '2018-09-25',
        'foo' => 'value1',
    ],
    [
        'date' => '2018-09-25',
        'bar' => 'value2'
    ],
    [
        'date' => '2018-09-26',
        'baz' => 'value3'
    ]
];

Что в итоге получилось так:

[
    [
        'date' => '2018-09-25'
        'foo' => 'value1'
        'bar' => 'value2'
    ],
    [
        'date' => '2018-09-26'
        'baz' => 'value3'
    ]
]

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать laravel collection .

Сначала вам нужно сгруппировать методом groupBy , затем map каждой группы и объединить каждого ребенкамассив.

Код:

$result = collect($input)
    ->groupBy('date')
    ->map(function ($item) {
        return array_merge(...$item->toArray());
    });

Вы получите эту коллекцию:

enter image description here

И в конце удалитеключи (дата), вы можете использовать значения и просто преобразовать коллекцию в массив ( toArray ).

Код окончания:

$result = collect($input)
    ->groupBy('date')
    ->map(function ($item) {
        return array_merge(...$item->toArray());
    })
    ->values()
    ->toArray();
...