Menu
Coddy logo textTech

Фильтрация по статусу выполнения

Часть раздела Основы путешествия по PHP на Coddy — урок 59 из 71.

challenge icon

Задание

Легко

В предыдущем уроке вы удалили задачу из списка. Теперь добавьте возможность фильтровать задачи по статусу выполнения.

Прочитайте четыре строки ввода для описаний задач (три начальные задачи плюс одна новая). Затем прочитайте пятый ввод: целое число, представляющее индекс задачи, которую нужно пометить как выполненную. Прочитайте шестой ввод: целое число, представляющее индекс задачи для удаления. Наконец, прочитайте седьмой ввод: строку, которая является либо completed, либо pending для фильтрации задач.

После создания массива $todos, пометки указанной задачи как выполненной и удаления задачи по данному индексу отфильтруйте оставшиеся задачи на основе входного фильтра:

  • Если фильтр completed, отобразите только задачи, где "completed" равно true
  • Если фильтр pending, отобразите только задачи, где "completed" равно false

Пройдитесь по оставшимся задачам и выведите только те, которые соответствуют фильтру, используя тот же формат:

  • Если задача выполнена: - [task description] (Done)
  • Если задача ожидает выполнения: - [task description] (Pending)

Выведите каждую подходящую задачу на отдельной строке.

Пример:

Если входные данные Buy groceries, Walk the dog, Finish homework, Call mom, 1, 2 и completed, вывод должен быть:

- Walk the dog (Done)

Если входные данные Buy groceries, Walk the dog, Finish homework, Call mom, 1, 2 и pending, вывод должен быть:

- Buy groceries (Pending)
- Call mom (Pending)

Попробуйте сами

<?php
// Read three task descriptions
$task1 = trim(fgets(STDIN));
$task2 = trim(fgets(STDIN));
$task3 = trim(fgets(STDIN));

// Read the new task to add
$newTask = trim(fgets(STDIN));

// Read the index of the task to mark as complete
$completeIndex = (int)trim(fgets(STDIN));

// Read the index of the task to remove
$removeIndex = (int)trim(fgets(STDIN));

// Create a $todos array containing three task arrays
// Each task should be an associative array with "task" and "completed" keys
$todos = [
    ["task" => $task1, "completed" => false],
    ["task" => $task2, "completed" => false],
    ["task" => $task3, "completed" => false]
];

// Add the new task to the end of the array
$todos[] = ["task" => $newTask, "completed" => false];

// Mark the task at the specified index as complete
$todos[$completeIndex]["completed"] = true;

// Remove the task at the specified removal index
array_splice($todos, $removeIndex, 1);

// Loop through the array and print each task in the formatted list
foreach ($todos as $todo) {
    if ($todo["completed"]) {
        echo "- " . $todo["task"] . " (Done)\n";
    } else {
        echo "- " . $todo["task"] . " (Pending)\n";
    }
}
?>

Все уроки раздела Основы