Группировка по вложенной коллекции laravel - PullRequest
0 голосов
/ 08 июля 2019

Я начал работать над анализом некоторых данных, и данные действительно беспорядочные, поэтому мне нужно преобразовать временные метки в удобочитаемые дату и время и т. Д.

Я пробовал стандартную группу, но это не былоуспешно, потому что массив является вложенным, и я понятия не имею, как к нему приблизиться.

Освещение \ Поддержка \ Объект коллекции ([items: protected] => Array ([0] => Array ([name] => Entity)1 [values] => Array ([0] => Array ([date] => 08.07.2019 [time] => 00:00 [counter] => 1)

                        [1] => Array
                            (
                                [date] => 08.07.2019
                                [time] => 01:00
                                [counter] => 3
                            )

                        [167] => Array
                            (
                                [date] => 14.07.2019
                                [time] => 23:00
                                [counter] => 0
                            )

                    )

            )
        [1] => Array
            (
                [name] => Entity 2
                [values] => Array
                    (
                        [0] => Array
                            (
                                [date] => 08.07.2019
                                [time] => 00:00
                                [counter] => 0
                            )

                        [1] => Array
                            (
                                [date] => 08.07.2019
                                [time] => 01:00
                                [counter] => 4
                            )

                        [2] => Array
                            (
                                [date] => 08.07.2019
                                [time] => 02:00
                                [counter] => 12
                            )

                        [3] => Array
                            (
                                [date] => 09.07.2019
                                [time] => 03:00
                                [counter] => 0
                            )

                        [4] => Array
                            (
                                [date] => 10.07.2019
                                [time] => 04:00
                                [counter] => 4
                            )

                        [5] => Array
                            (
                                [date] => 11.07.2019
                                [time] => 05:00
                                [counter] => 17
                            )

                    )

            )

Так что быбыть правильным способом сгруппировать это по дате, чтобы я мог получить один массив для одной даты для xample

дата 08.07: время: 02:00 счетчик: 12

timer: 04:00
counter: 1

дата 14.07: время: 05:00 счетчик: 1

time: 08:00
counter: 3

time: 01:00
counter: 6

Извините за пример дампа массива

Я пробовал что-то вроде:

$ collection = collect ($ values);$ groupedBy = $ collection-> groupBy ('date);

Но это не работает, так как это вложенный массив.

1 Ответ

1 голос
/ 08 июля 2019

Перед группировкой вы можете уменьшить коллекцию, чтобы иметь только значения элементов. После этого вы можете просто использовать группу по дате и времени:

$grouped = $collection
    ->reduce(function(Collection $carry, $item) {
        return $carry->merge($item['values']);
    }, new Collection())
    ->groupBy(function($item) {
        return sprintf('%s %s', $item['date'], $item['time']);
    });

, где Collection является импортированным Illuminate\Support\Collection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...