Фильтрация событий по месяцу
Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 63 из 68.
Задание
ЛегкоВы получите три входных значения: строку JSON, представляющую массив событий, строку с датой в формате YYYY-MM-DD, представляющую сегодняшнюю дату, и номер месяца (1-12) для фильтрации.
Первым входным значением будет строка JSON в следующем формате: [{"name":"Team Meeting","date":"2024-04-15","location":"Office"},{"name":"Conference","date":"2024-05-20","location":"Convention Center"},{"name":"Workshop","date":"2024-04-25","location":"Library"}]
Вторым входным значением будет строка с датой в формате: 2024-04-01
Третьим входным значением будет номер месяца в формате: 4
Прочитайте все три входных значения и декодируйте строку JSON в массив событий. Отфильтруйте события, чтобы включить только те, которые соответствуют обоим условиям:
- Дата события больше или равна сегодняшней дате (только предстоящие события)
- Событие происходит в указанном месяце
Используйте объекты DateTime для сравнения дат и извлечения месяца из даты каждого события с помощью метода format() с символом формата "n" (который возвращает номер месяца без ведущих нулей).
После фильтрации выведите каждое подходящее событие в следующем формате:
Event in month [month]: [name] on [date] at [location]
Выводите каждое событие на отдельной строке в том порядке, в котором они появляются в массиве. Если ни одно событие не соответствует обоим критериям, ничего не выводите.
Формат входных данных:
- Первая строка: Строка JSON, представляющая массив событий с ключами
name,dateиlocation - Вторая строка: Строка с датой в формате YYYY-MM-DD, представляющая сегодняшнюю дату (например:
2024-04-01) - Третья строка: Номер месяца от 1 до 12 (например:
4для апреля)
Ожидаемый вывод: Каждое событие, которое является одновременно предстоящим и относится к указанному месяцу, выведенное на отдельной строке в формате: Event in month [month]: [name] on [date] at [location]
Попробуйте сами
<?php
// Чтение входных данных
$jsonInput = trim(fgets(STDIN));
$todayDate = trim(fgets(STDIN));
$monthNumber = intval(trim(fgets(STDIN)));
// Декодирование JSON в массив
$events = (array)json_decode($jsonInput, true);
// TODO: Напишите свой код ниже
// Фильтрация предстоящих событий в указанном месяце
// Используйте объекты DateTime для сравнения дат
// Вывод каждого подходящего события в требуемом формате
?>Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров6Функции высшего порядка для массивов
Преобразование с помощью 'array_map''array_map' с пользовательской функциейФильтрация с помощью 'array_filter''array_filter' с пользовательской функциейСвертка с помощью 'array_reduce'Обход с помощью 'array_walk'Итоги: Обработка данных9Планировщик событий
Данные событийДобавление нового событияПотренируйтесь самостоятельно: Онлайн-компилятор PHP