Lệnh điều khiển vòng lặp

Điều khiển vòng lặp, tức là bạn điều khiển chương trình của bạn tự động thực hiện một đoạn mã lệnh nào đó lặp đi lặp lại nhiều lần (lặp một số lượng lần nào đó, hoặc lặp cho đến khi thoả mãn một điều kiện nào đó).

PHP cung cấp cho chúng ta hai kiểu vòng lặp: vòng lặp while (lặp kiểm tra điều kiện, cho đến khi điều kiện được thoả mãn) và vòng lặp for (xác định số lần lặp lại)

a) Vòng lặp while

Vòng lặp while là một dạng vòng lặp đơn giản nhất, cấu trúc của nó gần giống như lệnh if:

while (điều kiện)
{
//Khoi cau lenh can lap
}

Vòng lặp while sẽ ước lượng một biểu thức giá trị kiểu boolean (đúng hoặc sai).Nếu giá trị của biểu thức là false, đoạn mã trong cặp dấu ngoặc (đoạn mã cần lặp) sẽ được bỏ qua và nhảy đến đoạn mã sau vòng lặp. Nếu giá trị của nó là true, đoạn mã trong cặp dấu ngoặc sẽ được thực thi. Khi bắt gặp dấu ngoặc ôm ("}") , điều kiện kiểm tra sẽ được tính toán lại, và nếu giá trị vẫn là true, đoạn mã trong ngoặc lại tiếp tục được thực thi. Chú ý rằng điều kiện lặp chỉ được tính toán tại thời điểm bắt đầu lặp. Vì vậy, dù điều kiện lặp có bị thay đổi trong quá trình thực thi đoạn lệnh trong cặp dấu {} thì đoạn lệnh đó vẫn được tiếp tục thực hiện cho đến hết. Muốn dừng lại ở một vị trí xác định nào đó trong khối câu lệnh, chúng ta sử dụng lệnh break:
Ví dụ1: Tính tổng từ 1 đến 5:

<?php
$i=0;
$tong=0;
while ($i<=5)
{
$tong=$tong+$i;
$i+=1;
}
?>

Ví dụ 2: Đoạn mã sau sẽ hiển thị trên trình duyệt 3 ô textbox (Với điều kiện bạn phải save nó dưới một file *.php :

<HTML>
<TABLE>
<BODY>
<?php
$i=1;
while ($i<=3)
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}
?>
</table>
</body>
</html>

b. Vòng lặp do...while

Vòng lặp này giống như vòng lặp while, nhưng thay vì kiểm tra điều kiện vào lúc đầu của đoạn lệnh cần lặp, thì nó lại kiểm tra giá trị điều kiện vào cuối vòng lặp. Điều này có nghĩa là nó luôn luôn thực hiện đoạn lệnh cần lặp ít nhất một lần.

Cấu trúc của nó như sau:

do
{ Đoạn (khối) câu lệnh cần lặp
} while (điều kiện);

Ví dụ:
<HTML>
<TABLE>
<BODY>
<?php
$i=1;
do
{
?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
$i+=1;
}while ($i<=3);
?>
</table>
</body>
</html>

Để xác định lại sự khác nhau của 2 câu lệnh trên, đơn giản bạn chỉ việc thay điều kiện $i<=3 thành $i<1, bạn sẽ thấy hai kết quả khác nhau liền . Phần này dành cho bạn tự ngồi nghĩ. OK???

Quên mất, lúc nãy tôi đề cập đến lệnh break, nhưng chưa cho ví dụ, bây giờ chúng ta hãy xem xét ví dụ sau:

Các bạn biết rằng giai thừa là một con số lớn kinh khủng, và chương trình của chúng ta sẽ tính toán n giai thừa, với số n được gửi đến theo địa chỉ url: http://dia_chi_trang_web_cua_ban/giaithua.php?n=xx (ở đó x là một số do người dùng tự nhập)

Do giai thừa là một con số cực kỳ lớn, nên chúng ta chỉ cho phép người dùng tính đến tối đa là 8 giai thừa chẳng hạn. Nếu họ nhập lớn hơn 8 thì sao? Hãy xem đây:

<HTML>
<?php
// Ghi lai voi ten file la giaithua.php
$giaithua=1;
$i=1;
while ( $i<=$n)
{
$giaithua*=$i;
$i+=1;
if ($i>8 )
{
echo ("Chi tinh den 8! <BR>");
break;
}
}
echo ("Ket qua la: ".$giaithua);
?>
</HTML>

Đoạn mã trên chỉ cho phép tính đến 8 giai thừa, nếu người dùng nhập một con số lớn hơn 8 thì máy sẽ hiển thị 8 giai thừa, còn nếu nhỏ hơn thì vẫn chạy tốt.

c) Vòng lặp for.

Vòng lặp for, với ý nghĩa đầu tiên là lặp với số lần định trước, có cấu trúc như sau:

for ( $biến = giá_trị_đầu; $biến < (hay <=) giá_trị_kết_thúc; tăng_biến_đếm)
{
// Khối câu lệnh
}

Biểu thức $biến=giá_trị_đầu, đảm bảo biến được gán một giá trị khởi đầu (1)
Biểu thức $biến< (hay <=) giá_trị_kết_thúc, sẽ xác định xem biến đã đạt đến giá trị kết thúc (tức là điều kiện lặp không còn đúng nữa) chưa (2)
Biểu thức tính toán tăng_biến_đếm đảm bảo để sau một số lần lặp nào đó thì biểu thức xác định điều kiện (2) sẽ dẫn đến kết quả sai (để thoát khỏi vòng lặp).

Ví dụ:
for ( $i = 1; $i <10; ++$i)
{
echo ("Giá trị của biến \$i là: ".$i);
}

Một biến dạng khác của vòng lặp for, gần giống như lệnh rẽ nhánh if và while:

for (bieu_thuc_1; bieu_thuc_2; bieu_thuc_3):
// Khối câu lệnh
endfor;

Ví dụ:

<?php
for ($i=1; $i<=10;++$i)

?>
<TR><TD> <INPUT type="text"> </TD></TR>
<?php
endfor
?>

OK, Như vậy các bạn đã học qua các lệnh cơ bản nhất của php, và cũng là các lệnh cơ bản của tất cả các ngôn ngữ lập trình (gán, rẽ nhánh và lặp). Sau này nếu phải triển khai trên các ngôn ngữ lập trình khác, cách viết các lệnh này có thể khác nhau, nhưng bản chất của chúng thì mãi mãi không bao giờ thay đổi.