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.
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
?>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
1Hàm nâng cao
Hàm ẩn danhClosure và 'use'Hàm mũi tênHàm callbackDùng 'call_user_func'Hàm biếnTruyền tham chiếuHàm đệ quyÔn tập: tổng hợp về hàm4Mảng đa chiều
Tạo mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuChỉnh sửa phần tử trong mảng 2 chiềuLặp qua các vòng lặp lồng nhauMảng kết hợp 2 chiềuÔn tập: bài tập lưới đơn giản2Thao tác nâng cao với mảng
Thêm phần tử bằng 'array_push'Xóa phần tử bằng 'array_pop'Thêm phần tử vào đầu mảng bằng 'array_unshift'Xóa phần tử đầu mảng bằng 'array_shift'Gộp các mảng được đánh chỉ sốGộp các mảng kết hợpTrích xuất phần tử bằng 'array_slice'Kiểm tra giá trị bằng 'in_array'Tìm khóa bằng 'array_search'Ôn tập: bài tập về danh sách phát3Sắp xếp mảng
Sắp xếp mảng có chỉ số tăng dầnSắp xếp mảng có chỉ số giảm dầnSắp xếp mảng kết hợp theo giá trịSắp xếp mảng kết hợp theo khóaSắp xếp theo thứ tự tự nhiênSắp xếp tùy chỉnh bằng 'usort'Ôn tập: Sắp xếp bảng xếp hạngTự luyện tập: Trình biên dịch PHP online