Commit 33d65541 authored by Nikita Chernykh's avatar Nikita Chernykh
Browse files

Merge branch 'PTPS_Function_4' into 'main'

Ptps function 4

See merge request !4
parents ba4144a2 238fd405
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -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
+67 −2
Original line number Diff line number Diff line
@@ -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,],]],
     * ];
     */
}