for ($i = 0; $i < 5; $i++) { ... } chạy khối lệnh với số lần cố định. Ba phần của vòng lặp (loop) là phần khởi đầu ($i = 0, chạy một lần), điều kiện ($i < 5, được kiểm tra trước mỗi lượt) và bước nhảy ($i++, chạy sau mỗi lượt). Vòng lặp kết thúc ngay khi điều kiện sai.
$i vẫn tồn tại sau vòng lặp và giữ giá trị đã làm điều kiện sai (6). PHP không có phạm vi khối lệnh cho biến vòng lặp.
Duyệt mảng theo chỉ số
Với một danh sách có khóa 0, 1, 2 ..., biến đếm cũng đồng thời là chỉ số. Hãy lưu count() vào một biến trước để hàm không bị gọi lại ở mỗi lượt.
Phần đầu tiên có thể chứa nhiều biểu thức cách nhau bằng dấu phẩy, đó là cách $n = count($fruits) được gán đúng một lần. Khi chỉ cần từng giá trị (không cần các phần tử bên cạnh), foreach ngắn gọn hơn và cũng chạy được với mảng có khóa không đi từ 0 đến n - 1.
Đếm ngược và bước nhảy lớn hơn 1
Bước nhảy có thể là bất kỳ biểu thức nào: $i-- để đếm ngược, $i += 2 để lấy cách một số, $i *= 2 cho các lũy thừa của 2.
range('a', 'h') tạo ra mảng ['a', 'b', ... 'h']. Với range(1, 10) và foreach, bạn đếm được giống như vòng lặp for, nhưng phải tạo toàn bộ mảng trước.
break và continue
break kết thúc vòng lặp ngay lập tức. continue bỏ qua phần còn lại của lượt hiện tại và nhảy tới bước nhảy rồi lần kiểm tra điều kiện kế tiếp.
Vòng lặp thứ hai có điều kiện để trống, nghĩa là "luôn đúng", nên nó chạy cho đến khi gặp break. Trong các vòng lặp lồng nhau, break 2 và continue 2 tác động lên vòng lặp bên ngoài, như ví dụ tiếp theo cho thấy.
Vòng lặp for lồng nhau: bảng cửu chương
Một vòng lặp nằm trong vòng lặp khác sẽ chạy trọn vòng lặp bên trong cho mỗi lượt của vòng lặp bên ngoài. Ở đây đầu ra là HTML, nên tab Trang hiển thị một bảng thật.
Đổi $size thành 12 rồi chạy lại. Dạng for (...): và endfor; là cú pháp thay thế giúp vòng lặp dễ đọc khi nằm giữa các thẻ HTML. Cũng bảng đó nhưng dựng bằng văn bản thuần, kèm break 2 để dừng cả hai vòng lặp:
Lỗi thường gặp: lệch một và vòng lặp vô tận
Hai lỗi kinh điển với for: dùng <= với count() sẽ đọc vượt quá cuối mảng một phần tử, PHP báo Warning: Undefined array key 3 và coi giá trị đó là null; còn bước nhảy không bao giờ đưa biến đếm tiến về điểm kết thúc ($i-- trong khi ý bạn là $i++) khiến điều kiện luôn đúng mãi mãi.
Với những vòng lặp không biết trước độ dài, chẳng hạn đọc cho đến khi hết tệp, vòng lặp while phù hợp hơn.
Câu hỏi thường gặp
Làm sao duyệt mảng theo chỉ số trong PHP?
Với một danh sách có khóa 0, 1, 2, dùng for ($i = 0; $i < count($arr); $i++) { echo $arr[$i]; }. Trong phần lớn trường hợp, foreach ($arr as $i => $value) đơn giản hơn, cho cùng chỉ số và vẫn chạy được khi khóa không đi từ 0 đến n trừ 1.
Làm sao thoát khỏi vòng lặp for trong PHP?
break; rời khỏi vòng lặp ngay lập tức. Trong các vòng lặp lồng nhau, break 2; rời khỏi vòng lặp bên trong và cả vòng lặp bao quanh nó. continue; bỏ qua phần còn lại của lượt hiện tại và chuyển sang lượt tiếp theo.
Làm sao đếm ngược bằng vòng lặp for trong PHP?
Bắt đầu từ số lớn, so sánh bằng >= và giảm dần: for ($i = 10; $i >= 1; $i--) { echo $i; }. Với bước nhảy khác 1, hãy đổi phần thứ ba, ví dụ $i += 2 hoặc $i -= 5.
Khi nào nên dùng for thay vì foreach trong PHP?
Dùng for khi bạn cần đếm (lặp 5 lần, các số từ 1 đến 100, cứ cách một phần tử lấy một) hoặc cần phần tử kế tiếp hay phía trước theo chỉ số. Dùng foreach để đi qua mọi phần tử của mảng, nhất là mảng kết hợp, nơi không có chỉ số dạng số.