3v4l.org

run code in 300+ PHP versions simultaneously
<?php $sourceArray = 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) ); $sourceArray2 = 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), array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 2), array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1), array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 2), array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 2), array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1), ); $expect = [ [ 'ID' => 705, 'NAME' => 'Телефоны и гаджеты', 'DEPTH_LEVEL' => 1, 'CHILD' => [ [ 'ID' => 706, 'NAME' => 'Смартфоны', 'DEPTH_LEVEL' => 2 ], [ 'ID' => 5586, 'NAME' => 'Аксессуары для гаджетов', 'DEPTH_LEVEL' => 2, 'CHILD' => [ [ 'ID' => 715, 'NAME' => 'Аксессуары для телефонов', 'DEPTH_LEVEL' => 3, 'CHILD' => [ [ 'ID' => 716, 'NAME' => 'Чехлы для смартфонов', 'DEPTH_LEVEL' => 4, 'CHILD' => [ [ 'ID' => 5536, 'NAME' => 'Чехлы для Apple', 'DEPTH_LEVEL' => 5 ], [ 'ID' => 5539, 'NAME' => 'Чехлы для Samsung', 'DEPTH_LEVEL' => 5 ] ] ] ] ], [ 'ID' => 3010, 'NAME' => 'Защитные стекла для телефонов', 'DEPTH_LEVEL' => 3 ] ] ] ] ], [ 'ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1 ] ]; $expect2 = [ [ 'ID' => 705, 'NAME' => 'Телефоны и гаджеты', 'DEPTH_LEVEL' => 1, 'CHILD' => [ [ 'ID' => 706, 'NAME' => 'Смартфоны', 'DEPTH_LEVEL' => 2 ], [ 'ID' => 5586, 'NAME' => 'Аксессуары для гаджетов', 'DEPTH_LEVEL' => 2, 'CHILD' => [ [ 'ID' => 715, 'NAME' => 'Аксессуары для телефонов', 'DEPTH_LEVEL' => 3, 'CHILD' => [ [ 'ID' => 716, 'NAME' => 'Чехлы для смартфонов', 'DEPTH_LEVEL' => 4, 'CHILD' => [ [ 'ID' => 5536, 'NAME' => 'Чехлы для Apple', 'DEPTH_LEVEL' => 5 ], [ 'ID' => 5539, 'NAME' => 'Чехлы для Samsung', 'DEPTH_LEVEL' => 5 ] ] ] ] ], [ 'ID' => 3010, 'NAME' => 'Защитные стекла для телефонов', 'DEPTH_LEVEL' => 3 ] ] ] ] ], [ 'ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1, 'CHILD' => [ array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 2) ] ], [ 'ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1, 'CHILD' => [ array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 2), array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 2) ] ], array('ID' => 660, 'NAME' => 'Компьютерная техника', 'DEPTH_LEVEL' => 1), ]; /* ----Рекурсивный кусок говна---- */ // function makeTree(array $arr){ // $parent_lvl = -1; // $parent_index = -1; // $res = []; // foreach($arr as $index => $sub) { // $lvl = $sub['DEPTH_LEVEL']; // if ($index === 0 || $lvl === $parent_lvl) { // $parent_index++; // $res[$parent_index] = array_merge($sub, ['CHILD' => []] ); // $parent_lvl = $lvl; // } elseif($lvl > $parent_lvl) { // $res[$parent_index]['CHILD'][] = $sub; // } // } // for($i = 0; $i < count($res); $i++ ){ // $res[$i]['CHILD'] = makeTree($res[$i]['CHILD']); // } // return $res; // } // function removeEmptyNodes(array $arr) { // $count = count($arr); // for($i = 0; $i < $count; $i++){ // $hasChildNode = isset($arr[$i]['CHILD']); // $ChildNodeIsNotEmpty = $hasChildNode && count($arr[$i]['CHILD']) > 0; // if($ChildNodeIsNotEmpty){ // $arr[$i]['CHILD'] = removeEmptyNodes($arr[$i]['CHILD']); // } elseif ($hasChildNode) { // unset($arr[$i]['CHILD']); // } // } // return $arr; // } // $res = removeEmptyNodes(makeTree($sourceArray)); // $res2 = removeEmptyNodes(makeTree($sourceArray2)); // test($res, $expect); echo "\n"; // test($res2, $expect2); echo "\n"; // mijikaiDump($res); echo "\n"; // mijikaiDump($res2); echo "\n"; // var_dump($res); echo "\n\n\n\n\n"; // var_dump($res2); /* ----Рекурсивный кусок говна---- */ /* ----Нерекурсивный сладкий рулет---- */ function makeTreeIter(array $arr){ $parents = []; // level => index $res = []; foreach($arr as $index=>$sub){ $lvl = $sub['DEPTH_LEVEL']; if(isset($parents[$lvl-1])){ $i = &$parents[$lvl-1]; $i['CHILD'][] = $sub; $lastIndex = count($i['CHILD'])-1; $ref = &$i['CHILD'][$lastIndex]; $parents[$lvl] = &$ref; } else { $res[] = $sub; $lastIndex = count($res)-1; $ref = &$res[$lastIndex]; $parents[$lvl] = &$ref; } } return $res; } $res = makeTreeIter($sourceArray); $res2 = makeTreeIter($sourceArray2); test($res, $expect); echo "\n"; test($res2, $expect2); echo "\n"; mijikaiDump($res); echo "\n"; mijikaiDump($res2); echo "\n"; var_dump($res); echo "\n\n\n\n\n"; var_dump($res2); /* ----Нерекурсивный сладкий рулет---- */ function test($res, $expect) { if($res === $expect) { echo "OK: resuling and expected arrays match."; } else { throw new Exception("KO: resulting and expected arrays don't match."); } } function mijikaiDump(array $arr, string $tab = ''):void { foreach($arr as $val){ echo $tab.$val['DEPTH_LEVEL']." ".$val['NAME']."\n"; if(isset($val['CHILD'])) { mijikaiDump($val['CHILD'],$tab.' '); } } }

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.4.120.0110.01217.71
8.4.110.0130.00817.70
8.4.100.0100.00917.89
8.4.90.0110.01020.65
8.4.80.0060.00717.77
8.4.70.0050.00417.78
8.4.60.0140.00920.64
8.4.50.0140.00717.83
8.4.40.0190.00317.82
8.4.30.0030.00620.75
8.4.20.0100.00719.64
8.4.10.0030.00619.36
8.3.250.0110.01016.86
8.3.240.0110.00916.79
8.3.230.0130.00816.77
8.3.220.0050.00319.05
8.3.210.0120.00916.69
8.3.200.0050.00516.80
8.3.190.0060.01016.69
8.3.180.0060.00616.98
8.3.170.0140.00720.69
8.3.160.0030.01617.21
8.3.150.0090.00017.48
8.3.140.0080.00020.59
8.3.130.0060.00318.36
8.3.120.0100.00020.95
8.3.110.0070.00420.94
8.3.100.0140.00324.06
8.3.90.0150.00026.77
8.3.80.0100.00017.97
8.3.70.0160.00318.55
8.3.60.0100.01016.62
8.3.50.0100.01018.28
8.3.40.0100.00721.95
8.3.30.0070.01020.20
8.3.20.0170.00323.48
8.3.10.0100.01021.73
8.3.00.0070.01419.09
8.2.290.0150.00516.68
8.2.280.0070.01318.70
8.2.270.0090.00920.80
8.2.260.0060.00318.17
8.2.250.0030.00718.67
8.2.240.0170.00317.11
8.2.230.0070.00322.58
8.2.220.0070.00437.54
8.2.210.0060.00326.77
8.2.200.0040.00716.75
8.2.190.0100.00616.58
8.2.180.0080.01218.21
8.2.170.0060.01018.96
8.2.160.0080.00822.96
8.2.150.0130.00719.40
8.2.140.0080.00820.70
8.2.130.0100.00720.52
8.2.120.0070.01019.43
8.2.110.0080.00819.39
8.2.100.0090.00919.32
8.2.90.0130.00618.91
8.2.80.0110.00619.35
8.2.70.0100.00618.88
8.2.60.0120.00418.89
8.2.50.0110.00819.11
8.2.40.0100.00720.50
8.2.30.0110.00820.37
8.2.20.0130.00318.71
8.2.10.0060.01218.82
8.2.00.0080.00818.66
8.1.330.0120.00917.71
8.1.320.0110.00916.16
8.1.310.0190.00020.38
8.1.300.0120.00916.16
8.1.290.0110.00030.84
8.1.280.0130.00625.92
8.1.270.0100.01021.89
8.1.260.0110.00722.21
8.1.250.0150.00022.18
8.1.240.0090.01218.69
8.1.230.0080.00818.88
8.1.220.0100.01018.94
8.1.210.0130.00318.56
8.1.200.0080.00818.69
8.1.190.0060.00918.63
8.1.180.0110.01118.51
8.1.170.0110.01118.79
8.1.160.0110.00818.60
8.1.150.0040.01118.85
8.1.140.0110.00418.64
8.1.130.0090.00618.86
8.1.120.0100.00618.66
8.1.110.0100.00718.66
8.1.100.0100.00618.68
8.1.90.0100.00718.80
8.1.80.0130.00319.81
8.1.70.0140.00318.66
8.1.60.0120.00318.84
8.1.50.0060.00918.59
8.1.40.0130.00318.94
8.1.30.0040.01218.74
8.1.20.0130.00320.02
8.1.10.0090.00618.73
8.1.00.0150.00318.69

preferences:
25.49 ms | 403 KiB | 5 Q