Menu
Coddy logo textTech

Obsługa pustej listy

Część sekcji Podstawy ścieżki PHP w Coddy. Lekcja 60 z 71.

challenge icon

Wyzwanie

Łatwy

W poprzedniej lekcji filtrowałeś zadania według statusu ukończenia. Teraz dodaj obsługę sytuacji, w których przefiltrowany wynik jest pusty.

Wczytaj cztery wiersze danych wejściowych z opisami zadań (trzy początkowe zadania i jedno nowe zadanie). Następnie wczytaj piątą wartość: liczbę całkowitą oznaczającą indeks zadania do oznaczenia jako ukończone. Wczytaj szóstą wartość: liczbę całkowitą oznaczającą indeks zadania do usunięcia. Na koniec wczytaj siódmą wartość: ciąg znaków completed lub pending, aby filtrować zadania.

Po utworzeniu tablicy $todos, oznaczeniu wskazanego zadania jako ukończonego i usunięciu zadania o podanym indeksie odfiltruj pozostałe zadania na podstawie wartości filtra.

Przed wyświetleniem odfiltrowanych zadań sprawdź, czy jakiekolwiek zadania pasują do filtra:

  • Jeśli żadne zadania nie pasują do filtra, wypisz: No [filter] tasks found. (gdzie [filter] to completed lub pending)
  • Jeśli zadania pasują do filtra, wyświetl je w tym samym formacie co poprzednio

Format wyjściowy dla pasujących zadań:

  • Jeśli zadanie jest ukończone: - [task description] (Done)
  • Jeśli zadanie jest oczekujące: - [task description] (Pending)

Przykład 1:

Jeśli dane wejściowe to Buy groceries, Walk the dog, Finish homework, Call mom, 1, 1 i completed, wynikiem powinno być:

No completed tasks found.

Przykład 2:

Jeśli dane wejściowe to Buy groceries, Walk the dog, Finish homework, Call mom, 0, 2 i completed, wynikiem powinno być:

- Buy groceries (Done)

Przykład 3:

Jeśli dane wejściowe to Buy groceries, Walk the dog, Finish homework, Call mom, 0, 1 i pending, wynikiem powinno być:

- Finish homework (Pending)
- Call mom (Pending)

Spróbuj swoich sił

<?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));

// Read the filter type (completed or pending)
$filter = 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 that matches the filter
foreach ($todos as $todo) {
    if ($filter === "completed" && $todo["completed"]) {
        echo "- " . $todo["task"] . " (Done)\n";
    } elseif ($filter === "pending" && !$todo["completed"]) {
        echo "- " . $todo["task"] . " (Pending)\n";
    }
}
?>

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator PHP online