У меня есть плоская структура массива ($rows
) с массивом столбцов ($groupByCols
), по которому я хочу сгруппировать данные:
$groupByCols = ['a', 'b'];
$rows = [
[
'a' => 1,
'b' => 10,
'c' => 100
],
[
'a' => 1,
'b' => 20,
'c' => 200
],
[
'a' => 1,
'b' => 20,
'c' => 300
],
[
'a' => 1,
'b' => 30,
'c' => 400
],
[
'a' => 2,
'b' => 40,
'c' => 500
],
[
'a' => 2,
'b' => 50,
'c' => 600
],
[
'a' => 3,
'b' => 60,
'c' => 700
]
];
Перебирая переменную $rows
и ссылаясь на каждое из значений $groupByCols
по порядку, я хочу получить следующий иерархический массив:
$groupedRows = [
[
[
[
'a' => 1,
'b' => 10,
'c' => 100
]
],
[
[
'a' => 1,
'b' => 20,
'c' => 200
],
[
'a' => 1,
'b' => 20,
'c' => 300
]
],
[
[
'a' => 1,
'b' => 30,
'c' => 400
]
]
],
[
[
[
'a' => 2,
'b' => 40,
'c' => 500
]
],
[
[
'a' => 2,
'b' => 50,
'c' => 600
]
]
],
[
[
[
'a' => 3,
'b' => 60,
'c' => 700
]
]
]
];
Я на 99% уверен, что для этого мне нужно использовать рекурсию, но, попробовав примерно 10 разных вещей (ни одна из которых не сработала), я не могу понять, как получить то, что хочу.
Обычно, я бы поделился кодом, который я написал до сих пор, но, подумав об этом в течение нескольких дней и никуда не денясь, мне действительно нечего показать.
Я думаю, что мне просто нужно общее руководство о том, как я могу (предположительно) рекурсивно использовать переменные $groupByCols
и $rows
для получения массива $groupedRows
. Любая помощь будет принята с благодарностью.
Также обратите внимание, что приведенные выше данные очень просты для демонстрации. Реальные данные могут быть бесконечными длиннее и сложнее, и мне, возможно, придется опускаться на 5-6 уровней с помощью $groupByCols
, в зависимости от характера того, что требуется.
Спасибо.