@ 2024-02-04T22:14:19Z <?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.' ');
}
}
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
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).
Version System time (s) User time (s) Memory (MiB) 8.4.12 0.011 0.012 17.71 8.4.11 0.013 0.008 17.70 8.4.10 0.010 0.009 17.89 8.4.9 0.011 0.010 20.65 8.4.8 0.006 0.007 17.77 8.4.7 0.005 0.004 17.78 8.4.6 0.014 0.009 20.64 8.4.5 0.014 0.007 17.83 8.4.4 0.019 0.003 17.82 8.4.3 0.003 0.006 20.75 8.4.2 0.010 0.007 19.64 8.4.1 0.003 0.006 19.36 8.3.25 0.011 0.010 16.86 8.3.24 0.011 0.009 16.79 8.3.23 0.013 0.008 16.77 8.3.22 0.005 0.003 19.05 8.3.21 0.012 0.009 16.69 8.3.20 0.005 0.005 16.80 8.3.19 0.006 0.010 16.69 8.3.18 0.006 0.006 16.98 8.3.17 0.014 0.007 20.69 8.3.16 0.003 0.016 17.21 8.3.15 0.009 0.000 17.48 8.3.14 0.008 0.000 20.59 8.3.13 0.006 0.003 18.36 8.3.12 0.010 0.000 20.95 8.3.11 0.007 0.004 20.94 8.3.10 0.014 0.003 24.06 8.3.9 0.015 0.000 26.77 8.3.8 0.010 0.000 17.97 8.3.7 0.016 0.003 18.55 8.3.6 0.010 0.010 16.62 8.3.5 0.010 0.010 18.28 8.3.4 0.010 0.007 21.95 8.3.3 0.007 0.010 20.20 8.3.2 0.017 0.003 23.48 8.3.1 0.010 0.010 21.73 8.3.0 0.007 0.014 19.09 8.2.29 0.015 0.005 16.68 8.2.28 0.007 0.013 18.70 8.2.27 0.009 0.009 20.80 8.2.26 0.006 0.003 18.17 8.2.25 0.003 0.007 18.67 8.2.24 0.017 0.003 17.11 8.2.23 0.007 0.003 22.58 8.2.22 0.007 0.004 37.54 8.2.21 0.006 0.003 26.77 8.2.20 0.004 0.007 16.75 8.2.19 0.010 0.006 16.58 8.2.18 0.008 0.012 18.21 8.2.17 0.006 0.010 18.96 8.2.16 0.008 0.008 22.96 8.2.15 0.013 0.007 19.40 8.2.14 0.008 0.008 20.70 8.2.13 0.010 0.007 20.52 8.2.12 0.007 0.010 19.43 8.2.11 0.008 0.008 19.39 8.2.10 0.009 0.009 19.32 8.2.9 0.013 0.006 18.91 8.2.8 0.011 0.006 19.35 8.2.7 0.010 0.006 18.88 8.2.6 0.012 0.004 18.89 8.2.5 0.011 0.008 19.11 8.2.4 0.010 0.007 20.50 8.2.3 0.011 0.008 20.37 8.2.2 0.013 0.003 18.71 8.2.1 0.006 0.012 18.82 8.2.0 0.008 0.008 18.66 8.1.33 0.012 0.009 17.71 8.1.32 0.011 0.009 16.16 8.1.31 0.019 0.000 20.38 8.1.30 0.012 0.009 16.16 8.1.29 0.011 0.000 30.84 8.1.28 0.013 0.006 25.92 8.1.27 0.010 0.010 21.89 8.1.26 0.011 0.007 22.21 8.1.25 0.015 0.000 22.18 8.1.24 0.009 0.012 18.69 8.1.23 0.008 0.008 18.88 8.1.22 0.010 0.010 18.94 8.1.21 0.013 0.003 18.56 8.1.20 0.008 0.008 18.69 8.1.19 0.006 0.009 18.63 8.1.18 0.011 0.011 18.51 8.1.17 0.011 0.011 18.79 8.1.16 0.011 0.008 18.60 8.1.15 0.004 0.011 18.85 8.1.14 0.011 0.004 18.64 8.1.13 0.009 0.006 18.86 8.1.12 0.010 0.006 18.66 8.1.11 0.010 0.007 18.66 8.1.10 0.010 0.006 18.68 8.1.9 0.010 0.007 18.80 8.1.8 0.013 0.003 19.81 8.1.7 0.014 0.003 18.66 8.1.6 0.012 0.003 18.84 8.1.5 0.006 0.009 18.59 8.1.4 0.013 0.003 18.94 8.1.3 0.004 0.012 18.74 8.1.2 0.013 0.003 20.02 8.1.1 0.009 0.006 18.73 8.1.0 0.015 0.003 18.69
preferences:dark mode live preview ace vim emacs key bindings
25.49 ms | 403 KiB | 5 Q