diff --git a/index.php b/index.php index d5bf4b12fdb59b5cab5f3707b8e92d60d56b2c27..5b296f7e9cad5159f10f889b60952322a680bc5a 100644 --- a/index.php +++ b/index.php @@ -49,5 +49,27 @@ ]; print_r($func->uniqElements($arr)); ?> + + +

Function 4

+ 'Смартфоны и гаджеты','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)); + ?> \ No newline at end of file diff --git a/src/Functions.php b/src/Functions.php index 38a5f9ba6e32a5143c4169eaba47e7b6b5c35149..c1dc73b5e5d71b2f4fb1d7867836c0eabd4da0f1 100644 --- a/src/Functions.php +++ b/src/Functions.php @@ -59,7 +59,7 @@ class Functions * @return array */ - public function uniqElements(array $array): array + public function uniqElements(array $array): array { return array_unique($array, SORT_REGULAR); } @@ -71,6 +71,71 @@ class Functions * [1] => Array([0] => codeigniter, [1] => php) * [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,],]], + * ]; + */ }