Menu
CoddyTech

Lọc theo trạng thái hoàn thành

Thuộc phần Kiến thức cơ bản trong hành trình PHP của Coddy. Bài học 59 trên 71.

challenge icon

Thử thách

Dễ

Trong bài học trước, bạn đã xóa một nhiệm vụ khỏi danh sách. Bây giờ, hãy thêm khả năng lọc nhiệm vụ theo trạng thái hoàn thành.

Đọc bốn dòng đầu vào mô tả nhiệm vụ (ba nhiệm vụ ban đầu và một nhiệm vụ mới). Sau đó, đọc đầu vào thứ năm: một số nguyên biểu thị chỉ số của nhiệm vụ cần đánh dấu là đã hoàn thành. Đọc đầu vào thứ sáu: một số nguyên biểu thị chỉ số của nhiệm vụ cần xóa. Cuối cùng, đọc đầu vào thứ bảy: một chuỗi có giá trị là completed hoặc pending để lọc nhiệm vụ.

Sau khi tạo mảng $todos, đánh dấu nhiệm vụ được chỉ định là đã hoàn thành và xóa nhiệm vụ tại chỉ số đã cho, hãy lọc các nhiệm vụ còn lại dựa trên giá trị đầu vào để lọc:

  • Nếu giá trị lọc là completed, chỉ hiển thị các nhiệm vụ có "completed" là true
  • Nếu giá trị lọc là pending, chỉ hiển thị các nhiệm vụ có "completed" là false

Lặp qua các nhiệm vụ còn lại và chỉ in những nhiệm vụ khớp với giá trị lọc, theo cùng định dạng:

  • Nếu nhiệm vụ đã hoàn thành: - [task description] (Done)
  • Nếu nhiệm vụ đang chờ xử lý: - [task description] (Pending)

In mỗi nhiệm vụ khớp trên một dòng riêng.

Ví dụ:

Nếu đầu vào là Buy groceries, Walk the dog, Finish homework, Call mom, 1, 2 và completed, thì đầu ra sẽ là:

- Walk the dog (Done)

Nếu đầu vào là Buy groceries, Walk the dog, Finish homework, Call mom, 1, 2 và pending, thì đầu ra sẽ là:

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

Tự làm thử

<?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";
    }
}
?>

Tất cả bài học trong Kiến thức cơ bản

Tự luyện tập: Trình biên dịch PHP online