Menu
CoddyTech

Lặp qua các vòng lặp lồng nhau

Thuộc phần Logic và luồng chương trình trong hành trình PHP của Coddy. Bài học 30 trên 68.

Khi làm việc với mảng 2D, bạn thường cần xử lý từng phần tử, nên phải duyệt qua từng hàng rồi đến từng cột trong hàng đó. Đây là lúc vòng lặp lồng nhau trở nên cần thiết. Bạn dùng một vòng lặp bên trong một vòng lặp khác để duyệt có hệ thống toàn bộ cấu trúc lưới.

Vòng lặp bên ngoài duyệt qua từng hàng của mảng 2D, còn vòng lặp bên trong xử lý từng phần tử trong hàng hiện tại. Cách hoạt động của vòng lặp foreach như sau:

<?php
$schedule = [
    ["Meeting", "Lunch", "Presentation"],
    ["Training", "Review", "Planning"],
    ["Workshop", "Break", "Demo"]
];

foreach ($schedule as $day) {
    foreach ($day as $appointment) {
        echo $appointment . "\n";
    }
}
?>

Bạn cũng có thể dùng vòng lặp for truyền thống khi cần kiểm soát chỉ số tốt hơn. Cách này giúp bạn truy cập cả vị trí hàng và cột:

<?php
for ($row = 0; $row < count($schedule); $row++) {
    for ($col = 0; $col < count($schedule[$row]); $col++) {
        echo "Day " . ($row + 1) . ", Time " . ($col + 1) . ": " . $schedule[$row][$col] . "\n";
    }
}
?>

Mẫu vòng lặp lồng nhau này rất quan trọng để xử lý toàn bộ mảng 2D, dù bạn đang hiển thị dữ liệu, thực hiện phép tính hay tìm kiếm các giá trị cụ thể trong toàn bộ cấu trúc lưới.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận một đầu vào: một mảng 2D biểu diễn sơ đồ chỗ ngồi trong lớp học ở định dạng JSON. Mỗi mảng bên trong biểu diễn một hàng ghế, mỗi phần tử chứa tên học sinh hoặc chuỗi rỗng nếu ghế còn trống. Hãy đọc đầu vào, chuyển chuỗi JSON thành mảng 2D, dùng các vòng lặp lồng nhau để duyệt toàn bộ sơ đồ chỗ ngồi và in tên mỗi học sinh cùng vị trí của bạn ấy theo định dạng: Row X, Seat Y: Name

Bỏ qua ghế trống (chuỗi rỗng) và chỉ in thông tin về các ghế có người ngồi. Đánh số hàng ghế và chỗ ngồi bắt đầu từ 1 (không phải 0).

Định dạng đầu vào: Một dòng chứa một mảng JSON biểu diễn sơ đồ chỗ ngồi (ví dụ: [["Alice","Bob",""],["","Charlie","Diana"],["Eve","","Frank"]])

Đầu ra mong đợi: In mỗi ghế có người ngồi trên một dòng riêng theo định dạng Row X, Seat Y: Name, trong đó X là số hàng và Y là số chỗ ngồi (cả hai đều bắt đầu từ 1)

Tự làm thử

<?php
// Đọc đầu vào JSON
$input = trim(fgets(STDIN));

// Chuyển chuỗi JSON thành mảng hai chiều
$seating = (array)json_decode($input, true);

// TODO: Viết code bên dưới
// Dùng các vòng lặp lồng nhau để duyệt qua từng hàng và ghế
// Nhớ bỏ qua ghế trống và đánh số hàng, ghế bắt đầu từ 1


?>
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

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