<?php
$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
]
];
function group_by($array, $columns) {
$new_arr = array();
$column = array_shift($columns);
foreach ($array as $arr) {
$new_arr[$arr[$column]][] = $arr;
}
if (count($columns)) {
foreach ($new_arr as &$arr) {
$arr = group_by($arr, $columns);
}
}
return array_values($new_arr);
}
print_r(group_by($rows, $groupByCols));
preferences:
54.56 ms | 402 KiB | 5 Q