Loading index.php +22 −0 Original line number Diff line number Diff line Loading @@ -49,5 +49,27 @@ ]; print_r($func->uniqElements($arr)); ?> <h1>Function 4</h1> <?php $aMenu = [ ['name' => 'Смартфоны и гаджеты','depth' => 0,], ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,], ['name' => 'Планшеты','depth' => 1,], ['name' => 'Наушники и гарнитуры','depth' => 1,], ['name' => 'Компьютеры и ноутбуки','depth' => 0,], ['name' => 'Ноутбуки и аксессуары','depth' => 1,], ['name' => 'Компьютеры и мониторы','depth' => 1,], ['name' => 'Компьютерные комплектующие','depth' => 1,], ['name' => 'Техника для дома','depth' => 0,], ['name' => 'Техника для уборки','depth' => 1,], ['name' => 'Товары для ухода за одеждой','depth' => 1,], ['name' => 'Аксессуары для техники','depth' => 1,], ['name' => 'Товары для дома и кухни','depth' => 0,], ['name' => 'Посуда','depth' => 1,], ]; print_r($func->prepareMenu($aMenu)); ?> </body> </html> No newline at end of file src/Functions.php +67 −2 Original line number Diff line number Diff line Loading @@ -72,5 +72,70 @@ class Functions * [3] => Array([0] => c++, [1] => java)) * ) */ /** * Сгруппировать подразедлы в верхние разделы меню * Дочерние элементы поместить в массив родителя с ключом submenu * Значение под ключом depth определяет уровень раздела * Массив $aMenu всегда начинается с элемента depth = 0, * все последующие элементы с depth = 1 являются его дочерними * элементами * @param array $aMenu * @return array */ public function prepareMenu(array $aMenu): array { $result = []; foreach ($aMenu as $arr) { if ($arr['depth'] === 0) { $result[] = array( 'name' => $arr['name'], 'depth' => $arr['depth'], 'submenu' => [] ); continue; } $result[array_key_last($result)]['submenu'][] = array( 'name' => $arr['name'], 'depth' => $arr['depth'], ); } return $result; } /** * Выходные данные: * $aMenu = [ * [ * 'name' => 'Смартфоны и гаджеты', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,], * ['name' => 'Планшеты','depth' => 1,], * ['name' => 'Наушники и гарнитуры','depth' => 1,],], * ], * [ * 'name' => 'Компьютеры и ноутбуки', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Ноутбуки и аксессуары','depth' => 1,], * ['name' => 'Компьютеры и мониторы','depth' => 1,], * ['name' => 'Компьютерные комплектующие','depth' => 1,],]], * [ * 'name' => 'Техника для дома', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Техника для уборки','depth' => 1,], * ['name' => 'Товары для ухода за одеждой','depth' => 1,], * ['name' => 'Аксессуары для техники','depth' => 1,],] * ], * [ * 'name' => 'Товары для дома и кухни', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Посуда','depth' => 1,],]], * ]; */ } Loading
index.php +22 −0 Original line number Diff line number Diff line Loading @@ -49,5 +49,27 @@ ]; print_r($func->uniqElements($arr)); ?> <h1>Function 4</h1> <?php $aMenu = [ ['name' => 'Смартфоны и гаджеты','depth' => 0,], ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,], ['name' => 'Планшеты','depth' => 1,], ['name' => 'Наушники и гарнитуры','depth' => 1,], ['name' => 'Компьютеры и ноутбуки','depth' => 0,], ['name' => 'Ноутбуки и аксессуары','depth' => 1,], ['name' => 'Компьютеры и мониторы','depth' => 1,], ['name' => 'Компьютерные комплектующие','depth' => 1,], ['name' => 'Техника для дома','depth' => 0,], ['name' => 'Техника для уборки','depth' => 1,], ['name' => 'Товары для ухода за одеждой','depth' => 1,], ['name' => 'Аксессуары для техники','depth' => 1,], ['name' => 'Товары для дома и кухни','depth' => 0,], ['name' => 'Посуда','depth' => 1,], ]; print_r($func->prepareMenu($aMenu)); ?> </body> </html> No newline at end of file
src/Functions.php +67 −2 Original line number Diff line number Diff line Loading @@ -72,5 +72,70 @@ class Functions * [3] => Array([0] => c++, [1] => java)) * ) */ /** * Сгруппировать подразедлы в верхние разделы меню * Дочерние элементы поместить в массив родителя с ключом submenu * Значение под ключом depth определяет уровень раздела * Массив $aMenu всегда начинается с элемента depth = 0, * все последующие элементы с depth = 1 являются его дочерними * элементами * @param array $aMenu * @return array */ public function prepareMenu(array $aMenu): array { $result = []; foreach ($aMenu as $arr) { if ($arr['depth'] === 0) { $result[] = array( 'name' => $arr['name'], 'depth' => $arr['depth'], 'submenu' => [] ); continue; } $result[array_key_last($result)]['submenu'][] = array( 'name' => $arr['name'], 'depth' => $arr['depth'], ); } return $result; } /** * Выходные данные: * $aMenu = [ * [ * 'name' => 'Смартфоны и гаджеты', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Смартфоны, мобильные телефоны','depth' => 1,], * ['name' => 'Планшеты','depth' => 1,], * ['name' => 'Наушники и гарнитуры','depth' => 1,],], * ], * [ * 'name' => 'Компьютеры и ноутбуки', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Ноутбуки и аксессуары','depth' => 1,], * ['name' => 'Компьютеры и мониторы','depth' => 1,], * ['name' => 'Компьютерные комплектующие','depth' => 1,],]], * [ * 'name' => 'Техника для дома', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Техника для уборки','depth' => 1,], * ['name' => 'Товары для ухода за одеждой','depth' => 1,], * ['name' => 'Аксессуары для техники','depth' => 1,],] * ], * [ * 'name' => 'Товары для дома и кухни', * 'depth' => 0, * 'submenu' => [ * ['name' => 'Посуда','depth' => 1,],]], * ]; */ }