@koshelevsergey

Как из одного массива записать в другой массив?

Возникла трудность с таким решением:

Есть массив истории:
P.S. Работаю с Yii2 (массив такой получается при запросе History::find()->all(); )

$app = [
    [
        'name' => 'Вячеслав Рябов',
        'entity' => 'Менеджер',
        'data' => [
            'Статус' => 'Ожидает',
            'Тип' => 'Документ',
        ],
        'created_at' => '2018-05-02 12:38:15',
    ],
    [
        'name' => 'Рома Винатов',
        'entity' => 'Vtytl;th',
        'data' => [
            'Тип' => 'Заявка',
            'Автор' => 'Вячеслав Рябов',
            'Приоритет' => 'Высокий',
        ],
        'created_at' => '2018-05-02 09:25:35',
    ],
    [
        'name' => 'Стас Егоров',
        'entity_name' => 'Файлы',
        'data' => [
            'Статус' => 'Готов',
        ],
        'created_at' => '2018-09-12 16:14:08',
    ],
];


Нужно сделать так чтоб к одной дате 2018-05-02 выводились все записи.

Тобишь массив должен получиться таким:

$result = [
    '2018-05-02' => [
        [
            'name' => 'Вячеслав Рябов',
            'entity' => 'Менеджер',
            'data' => [
                'Статус' => 'Ожидает',
                'Тип' => 'Документ',
            ],
            'created_at' => '2018-05-02 12:38:15',
        ],
        [
            'name' => 'Рома Винатов',
            'entity' => 'Vtytl;th',
            'data' => [
                'Тип' => 'Заявка',
                'Автор' => 'Вячеслав Рябов',
                'Приоритет' => 'Высокий',
            ],
            'created_at' => '2018-05-02 09:25:35',
        ],
    ],
    '2018-09-12' => [
        [
            'name' => 'Стас Егоров',
            'entity_name' => 'Файлы',
            'data' => [
                'Статус' => 'Готов',
            ],
            'created_at' => '2018-09-12 16:14:08',
        ],
    ]
];


Пробывал делать через foreach но безуспешно .
Подскажите как можно сделать?
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
Immortal_pony
@Immortal_pony
function groupBy(array $elements, callable $getUniqueKey) {
    $grouped = [];
    
    foreach ($elements as $element) {
        $uniqueKey = $getUniqueKey($element);
        $grouped[$uniqueKey][] = $element;
    }
    
    return $grouped;
}

$groupedByDate = groupBy($app, function($event) {
    return date("Y-m-d", strtotime($event['created_at']));
});


Пример
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
d0kuro
@d0kuro
Бубубубубу
Там может проще сделать запрос к базе и попросить у ней все записи с created_at равной нужной Вам?...
Ответ написан
profesor08
@profesor08
Пробегись по массиву и пересобери данные как тебе удобнее. Возникшая проблема не ясна.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы