<?php
$items = [
['item1' => 'a', 'item2' => 'c', 'item3' => 'd2', 'item4' => 'f'],
['item1' => 'a', 'item2' => 'c', 'item3' => 'd2', 'item4' => 'g'],
['item1' => 'a', 'item2' => 'd', 'item3' => 'd3', 'item4' => 'h'],
['item1' => 'a', 'item2' => 'd', 'item3' => 'e', 'item4' => 'i'],
['item1' => 'b', 'item2' => 'c', 'item3' => 'e', 'item4' => 'j'],
['item1' => 'b', 'item2' => 'c', 'item3' => 'e', 'item4' => 'k']
];
$result = [];
foreach ($items as $row) {
$k1 = $row['item1'];
$k2 = $row['item1'] . '_' . $row['item2'];
$k3 = $row['item1'] . '_' . $row['item2'] . '_' . $row['item3'];
if (!isset($ref3[$k3])) {
$ref3[$k3] = [$row['item3'], [$row['item4']]];
if (!isset($ref2[$k2])) {
$ref2[$k2] = [$row['item2'], &$ref3[$k3]];
if (!isset($ref1[$k1])) {
$ref1[$k1] = [$row['item1'], &$ref2[$k2]];
$result[] = &$ref1[$k1];
} else {
$ref1[$k1][] = &$ref2[$k2];
}
} else {
$ref2[$k2][1][] = &$ref3[$k3];
}
} else {
$ref3[$k3][1][] = $row['item4'];
}
}
echo json_encode($result);
- Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- [["a",["c",["d2",["f","g"]]],["d",["d3",["h"],["e",["i"]]]]],["b",["c",["e",["j","k"]]]]]
preferences:
80.69 ms | 406 KiB | 5 Q