3v4l.org

run code in 300+ PHP versions simultaneously
<?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