Commit 020308e6 authored by Адлан Шамавов's avatar Адлан Шамавов
Browse files

add howDaysToNy

parent fc6221f3
Loading
Loading
Loading
Loading
+9 −75
Original line number Diff line number Diff line
<?php

/**  
 * Сгруппировать подразедлы в верхние разделы меню  
 * Дочерние элементы поместить в массив родителя с ключом submenu  *
 * Значение под ключом depth определяет уровень раздела  * 
 * Массив $aMenu всегда начинается с элемента depth = 0, 
 * все последующие элементы с depth = 1 являются его дочерними  * 
 * элементами  *  * 
 * @param array $aMenu  *  * 
 * @return array 
 * Функция рассчитывает кол-во дней до нового года  
 * @param DateTime $date дата от которой, необходимо рассчитать кол-во дней  
 * @return int  
 */ 

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;
function howDaysToNy(DateTimeImmutable $date): int {
    $endYear = date("Y-12-31", date_timestamp_get($date)); 
    $dateInterval = date_diff(new DateTimeImmutable($endYear), $date);
    return $dateInterval->format("%a") + 1;
}

/** Выходные данные: 
 * $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,],]], ];
*/
?>

<!DOCTYPE html>
@@ -71,23 +21,7 @@ function prepareMenu(array $aMenu): array {
</head>
<body>
    <?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(prepareMenu($aMenu));
        print(howDaysToNy(new DateTimeImmutable()));
    ?>
</body>
</html>
 No newline at end of file