Skip to content
Snippets Groups Projects
index.php 3.8 KiB
Newer Older
Адлан Шамавов's avatar
Адлан Шамавов committed
<?php
Адлан Шамавов's avatar
Адлан Шамавов committed
/**  
 * Сгруппировать подразедлы в верхние разделы меню  
 * Дочерние элементы поместить в массив родителя с ключом submenu  *
 * Значение под ключом depth определяет уровень раздела  * 
 * Массив $aMenu всегда начинается с элемента depth = 0, 
 * все последующие элементы с depth = 1 являются его дочерними  * 
 * элементами  *  * 
 * @param array $aMenu  *  * 
 * @return array 
Адлан Шамавов's avatar
Адлан Шамавов committed
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;
Адлан Шамавов's avatar
Адлан Шамавов committed
/** Выходные данные: 
 * $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,],]], ];
*/
Адлан Шамавов's avatar
Адлан Шамавов committed
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
Адлан Шамавов's avatar
Адлан Шамавов committed
        $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(prepareMenu($aMenu));
Адлан Шамавов's avatar
Адлан Шамавов committed
    ?>
</body>
</html>