<?php
$arr = array(
array('ID' => 705, 'NAME' => 'Телефоны и гаджеты', 'DEPTH_LEVEL' => 1),
array('ID' => 706, 'NAME' => 'Смартфоны', 'DEPTH_LEVEL' => 2),
array('ID' => 5586, 'NAME' => 'Аксессуары для гаджетов', 'DEPTH_LEVEL' => 2),
array('ID' => 715, 'NAME' => 'Аксессуары для телефонов', 'DEPTH_LEVEL' => 3),
array('ID' => 716, 'NAME' => 'Чехлы для смартфонов', 'DEPTH_LEVEL' => 4),
array('ID' => 5536, 'NAME' => 'Чехлы для Apple', 'DEPTH_LEVEL' => 5),
array('ID' => 5539, 'NAME' => 'Чехлы для Samsung', 'DEPTH_LEVEL' => 5),
array('ID' => 3010, 'NAME' => 'Защитные стекла для телефонов', 'DEPTH_LEVEL' => 3),
array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1)
);
$tree = [];
$stack = [];
for ($i = 0; $i < count($arr); $i++) {
while (!empty($stack) && $stack[count($stack) - 1]['DEPTH_LEVEL'] >= $arr[$i]['DEPTH_LEVEL']) {
array_pop($stack);
}
$index=end($stack)['INDEX'];
$tree[$index]['CHILDREN'][] = [
'ID' => $arr[$i]['ID'],
'NAME' => $arr[$i]['NAME']
];
$stack[] = [
'INDEX' => count($tree[$index]) - 1,
'DEPTH_LEVEL' => $arr[$i]['DEPTH_LEVEL'],
];
}
print_r($tree);
- Output for 8.3.0 - 8.3.7
- Warning: Trying to access array offset on false in /in/GgjoI on line 25
Warning: Trying to access array offset on false in /in/GgjoI on line 25
Array
(
[] => Array
(
[CHILDREN] => Array
(
[0] => Array
(
[ID] => 705
[NAME] => Телефоны и гаджеты
)
[1] => Array
(
[ID] => 660
[NAME] => Компьютерная техника
)
)
)
[0] => Array
(
[CHILDREN] => Array
(
[0] => Array
(
[ID] => 706
[NAME] => Смартфоны
)
[1] => Array
(
[ID] => 5586
[NAME] => Аксессуары для гаджетов
)
[2] => Array
(
[ID] => 715
[NAME] => Аксессуары для телефонов
)
[3] => Array
(
[ID] => 716
[NAME] => Чехлы для смартфонов
)
[4] => Array
(
[ID] => 5536
[NAME] => Чехлы для Apple
)
[5] => Array
(
[ID] => 5539
[NAME] => Чехлы для Samsung
)
[6] => Array
(
[ID] => 3010
[NAME] => Защитные стекла для телефонов
)
)
)
)
- Output for 8.1.0 - 8.1.28, 8.2.0 - 8.2.19
- Warning: Trying to access array offset on value of type bool in /in/GgjoI on line 25
Warning: Trying to access array offset on value of type bool in /in/GgjoI on line 25
Array
(
[] => Array
(
[CHILDREN] => Array
(
[0] => Array
(
[ID] => 705
[NAME] => Телефоны и гаджеты
)
[1] => Array
(
[ID] => 660
[NAME] => Компьютерная техника
)
)
)
[0] => Array
(
[CHILDREN] => Array
(
[0] => Array
(
[ID] => 706
[NAME] => Смартфоны
)
[1] => Array
(
[ID] => 5586
[NAME] => Аксессуары для гаджетов
)
[2] => Array
(
[ID] => 715
[NAME] => Аксессуары для телефонов
)
[3] => Array
(
[ID] => 716
[NAME] => Чехлы для смартфонов
)
[4] => Array
(
[ID] => 5536
[NAME] => Чехлы для Apple
)
[5] => Array
(
[ID] => 5539
[NAME] => Чехлы для Samsung
)
[6] => Array
(
[ID] => 3010
[NAME] => Защитные стекла для телефонов
)
)
)
)
preferences:
61.7 ms | 410 KiB | 62 Q