Loop là gì?
Vòng lặp còn được gọi là loop, vòng lặp sẽ giúp rút ngắn thời gian đáng kể cho việc lặp lại nhiều lần một thao tác nào đó.
Muốn xuất ra một dãy số từ 1 đến 5 như ví dụ dưới đây.
echo 1; echo 2; echo 3; echo 4; echo 5;
Trong trường hợp này với chỉ 5 số nhưng nếu ta muốn in 100 số thì cách làm như trên sẽ tiêu tốn nhiều thời gian. Vì vậy sẽ dùng vòng lặp để thể hiện dãy số trên.
for($i = 1; $i <= 5; $i++) { echo $i; }
Hai cách khác nhau nhưng cho ra cùng một kết quả như nhau, số lượng dòng code sẽ được rút ngắn đáng kể.
For và Foreach
For
for($i = 1; $i <= 5; $i++) { // các công việc được lặp lại 5 lần }
Vòng lặp này sẽ bắt đầu với từ khóa for và theo sau đó là là cặp dấu ngoặc đơn ()
, trong cặp dấu này sẽ có 3 phần tử và cách nhau bởi dấu chấm phẩy ;
. Trong ví dụ trên vòng lặp này sẽ bắt đầu từ số $i = 1
cho đến số $i <= 5
và bước nhảy sẽ là 1 $i++
⇔ $i = $i + 1
. Và tất cả những dòng code được đặt trong dấu {}
sẽ được lặp lại 5 lần.
Cũng có thể thay đổi bước nhảy của vòng lặp sao cho phù hợp. Ví dụ muốn in ra các số chẵn chục từ 10 đến 100, thay vì sử dụng $i++
ta sẽ dùng $i = $i + 10
.
for($i = 10; $i <= 100; $i=$i+10) { echo $i." "; //10 20 30 40 50 60 70 80 90 100 }
Foreach
Vòng lặp này cho phép ta duyệt qua tất cả các phần tử của mảng.
$numbers = array(1, 2, 3, 4, 5); foreach($numbers as $number) { echo $number; //12345 }
Vòng lặp này sẽ có bước nhảy là từ phần tử này đến phần tử tiếp theo trong mảng cho đến hết. Số vòng lặp và những dòng code trong cặp dấu {}
cũng có số lần lặp lại bằng với số lượng phần tử trong mảng.
While và Do-While
While
Chức năng của vòng lặp while
tương đương vòng lặp for
, nhưng thay vì for
có 3 vế bao gồm cho phép khởi tạo các giá trị đầu tiên trước khi vào vòng lặp, vế thứ 2 là biểu thức so sánh, vế thứ 3 là sau khi kết thúc 1 lượt lặp thì sẽ cho phép thực hiện vài phép tính đơn giản, còn while
thì chỉ có biểu thức so sánh, các tính năng khác phải tự triển khai.
$flag = true; while($flag) { echo "infinity"; }
Trong ví dụ trên vòng lặp while
không có điều kiện dừng vì vậy vòng lặp này là vô tận. Trong vòng lặp while
không cần phải cho trước điều kiện dừng, điều kiện dừng có thể sinh ra trong quá trình thực hiện vòng lặp.
$i = 0; $flag = true; while($flag == true) { echo $i." "; //0 1 2 3 4 5 6 7 8 9 10 if($i == 10) { $flag = false; } $i++; }
Trong ví dụ này vòng điều kiện dừng được sinh ra là khi biến $i
tiến đến 10.
Do–While
Điều khác nhau giữa vòng lặp while
và do-while
là vòng lặp while
sẽ kiếm tra giá trị trước khi vào vòng lặp còn do-while
sẽ thực hiện lần lặp đầu tiên sau đó mới kiểm tra điều kiện. Cùng xem 2 ví dụ sau đây:
// 1. while $i = 0; while($i < 0) { echo $i; // không hiện ra giá trị } // 2. do-while $i = 0; do{ echo $i; // 0 } while($i < 0);
Đoạn code 1, thực hiện hiện phép so sánh ngay, và không thỏa nên không tiến hành thực hiện block code. Còn đoạn code 2, sẽ thực thi lần đầu trước, rồi mới tiến hành so sánh.