<?php
$json = '[
{"id":3633,"name":"Mobile phones and accessories","left":1,"right":18,"level":1,"elements":0},
{"id":3638,"name":"Mobile phones","left":2,"right":3,"level":2,"elements":174},
{"id":21396,"name":"Tablets","left":19,"right":24,"level":1,"elements":0},
{"id":21450,"name":"Some Tablets","left":20,"right":21,"level":2,"elements":8},
{"id":21450,"name":"other Tablets","left":20,"right":21,"level":2,"elements":8}
]';
$data = new ArrayIterator(json_decode($json, true));
function buildTree(iterator $data, int $level = 1): array {
$tree = array();
while ($data->valid()) {
$item = $data->current();
if ($item['level'] < $level)
return $tree;
if ($item['level'] === $level) {
$data->next();
$tree[] = [
'item' => $item,
'children' => buildTree($data, $level + 1),
];
}
}
return $tree;
}
$tree = buildTree($data);
print_r($tree);
?>
- Output for 8.1.23 - 8.1.33, 8.2.7 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- Array
(
[0] => Array
(
[item] => Array
(
[id] => 3633
[name] => Mobile phones and accessories
[left] => 1
[right] => 18
[level] => 1
[elements] => 0
)
[children] => Array
(
[0] => Array
(
[item] => Array
(
[id] => 3638
[name] => Mobile phones
[left] => 2
[right] => 3
[level] => 2
[elements] => 174
)
[children] => Array
(
)
)
)
)
[1] => Array
(
[item] => Array
(
[id] => 21396
[name] => Tablets
[left] => 19
[right] => 24
[level] => 1
[elements] => 0
)
[children] => Array
(
[0] => Array
(
[item] => Array
(
[id] => 21450
[name] => Some Tablets
[left] => 20
[right] => 21
[level] => 2
[elements] => 8
)
[children] => Array
(
)
)
[1] => Array
(
[item] => Array
(
[id] => 21450
[name] => other Tablets
[left] => 20
[right] => 21
[level] => 2
[elements] => 8
)
[children] => Array
(
)
)
)
)
)
preferences:
75.75 ms | 417 KiB | 5 Q