Ở bài trước mình đã giới thiều về các biểu thức điều kiện if else và cấu trúc rẽ nhánh switch case, các bạn nếu chưa xem có thể xem thêm tại Bài 5: Biểu Thức Điều Kiện Trong PHP (Lệnh if, else, switch). Tiếp tục lộ trình học PHP căn bản thì qua bài này mình sẽ giới thiệu cho các bạn về vòng lặp (tên khác là Loop) trong PHP nhé!
Vòng lặp là gì ?
Nói ngắn gọn thì vòng lặp được sử dụng để thực thi một đoạn code lặp đi lặp lại một số lần nhất định dựa trên giá trị trả về từ một điều kiện cho trước.
Các Loại Vòng Lặp Trong PHP
Khi lập trình đôi khi chúng ta sẽ cần chạy một đoạn code lặp đi lặp lại, lúc này sử dụng vòng lặp sẽ giúp chúng ta tránh việc phải thêm vào tập tin PHP những đoạn code giống nhau này nhiều lần.
Trong PHP chúng ta có các loại vòng lặp sau:
- Vòng lặp
while
. – Lặp một hành động dựa theo một điều kiện cụ thể mà nó trả về là true - Vòng lặp
do...while
. – Lặp một hành động với số lần lặp nhất định - Vòng lặp
for
. – Lặp một hành động với số lần lặp nhất định - Vòng lặp
foreach
. – Sử dụng để lặp các khoá và giá trị trong một dữ liệu mảng.
Vòng lặp for trong PHP
Thường bạn sử dụng vòng lặp này khi đã biết rõ trước số lần cần lặp lại là bao nhiêu.
Cú pháp
for ($bien_khoi_tao; $bieu_thuc_dieu_kien; $bieu_thuc_thay_doi_bien_khoi_tao) { // phần câu lệnh thực thi vòng lặp }
- $bien_khoi_tao: là một câu lệnh chứa biến được gán giá trị ban đầu mà ta truyền vào trước khi chạy vòng lặp. Câu lệnh này chỉ thực hiện 1 lần duy nhất
- $bieu_thuc_dieu_kien: là một biểu thức quan hệ nào đó nhằm mục đích xác định điều kiện thoát khỏi vòng lập.
- $bieu_thuc_thay_doi_bien_khoi_tao: Là biểu thức xác định $bien_khoi_tao sẽ bị thay đổi như thế nào sau mỗi lần vòng lặp được lặp lại
<?php for ($i = 0 ; $i <= 10 ; $i++){ echo $i . '<br>'; } ?>
$i = 0
là biến khỏi tạo cho vòng lặp và có giá trị khởi tạo bằng 0$i <= 10
là biểu thức điều kiện để dừng vòng lặp ( nếu$i <= 10
thì vòng lặp sẽ vẫn tiếp tục lặp, ngược lại nếu$i > 10
thì biểu thức sẽ hiểu là sai nên vòng lặp sẽ thoát$i++
là biểu thức thay đổi biến khởi tại, sau mỗi lần lặp$i
sẽ tăng lên 1
Ngoài ra khi khai báo cú pháp của vòng lặp thì trong thân của nó ta có thể thêm các biểu thức phụ bằng dấu phẩy để phâ biệt và ngăn cách chúng.
<?php for ($i = 0 , $j = 5 ; $i <= 10 ; $i++ , $j++) { echo 'i = ' . $i . '<br>'; echo 'j = ' . $j . '<br>'; // biến j sẽ xuất hiện theo thứ tự lần lượt cùng với biến i cho đến khi i>10 và kết thúc vòng lặp } ?>
Vòng lặp for lồng nhau
Nói một cách nôm na là có một vòng lặp cha sẽ bao một vòng lặp con khác bên trong nó. Ở mỗi lần lặp cho vòng lặp cha, vòng lặp con bên trong phải lặp hết điều kiện lặp của nó, sau đó mới lặp tiếp vòng lặp cha và cứ tiếp tục như vậy.
Như vậy ta sẽ thấy nó đang tuân thủ theo quy tắc phải thực hiện hết tất cả nội dung dòng lệnh bên trong vòng lặp rồi mới thực hiện vòng kế tiếp.
<?php $a=0; for ($i = 0; $i < 10; ++$i) { for ($j = 0; $j < 10; ++$j) { $a++; echo "Line $a = " . $i*$j .'<br/>'; } } ?>
Với mỗi giá trị $i , chương trình thực hiện lệnh for($j=0;$j<10;++$j) 1 lần.
Bây giờ ta xét với vòng for($j=0;$j<10;++$j), và giá trị i là cố định, vòng for này sẽ thực hiện câu lệnh echo 10 lần.
Như vậy khi giá trị $i thay đổi 10 lần, với mỗi giá trị $i thì chương trình lại in câu lệnh echo 10 lần, như vậy tổng cộng là 100 lần in tất cả. Các bạn hãy code lại đoạn code cí dụ trên và chạy trên trình duyệt thử nhé!
Vòng lặp while trong PHP
Vòng lặp while cũng dùng để lặp dữ liệu như các vòng lặp khác nhưng ưu điểm của nó là có thể giải quyết những bài toán không biết chính xác số vòng lặp (một số bài toán thì for cũng có thể làm được) và cách sử dụng nó cũng rất đơn giản.
Cú pháp
while ($dieu_kien) { // phần câu lệnh thực thi vòng lặp }
$dieu_kien
là điều kiện của vòng lặp. Nếu điều kiện trả về true thì vòng lặp sẽ chạy và ngược lại false thì sẽ dừng.- Suy ra nếu vòng lặp while sẽ lặp vô hạn nếu biểu thức điều kiện bạn truyền vào luôn luôn là true.
Ví dụ
liệt kê các số từ 1 tới 10 bằng cách sử dụng vòng lặp while.
<?php $i = 1; //khởi tạo biến $i bằng 1 while ($i <= 10) { echo $i++; } ?>
Trong đó $i = 1
là biến dùng để lặp. Biểu thức $i <= 10
là điều kiện lặp. Bài toán sẽ thực hiện lặp cho đến khi $i = 10, vậy ta sẽ có 10 lần lặp và mỗi lần lặp biến $i sẽ tăng thêm 1 giá trị, như vậy ta sẽ có kết quả là lần lượt các số từ 1 đến 10 : 12345678910
Vòng lặp do while trong PHP
Đây là một vòng lặp ngược lại với các vòng lặp từ trước đến giờ, các vòng lặp khác kiểm tra điều kiện trước rồi với thực thi câu lệnh, còn vòng lặp do-while thực thi câu lệnh trước rồi mới kiểm tra điều kiện. Nếu điều kiện đúng thì sẽ thực hiện tiếp vòng lặp kế tiếp, nếu điều kiện sai thì sẽ dừng vòng lặp.
Vòng lặp do while tương tự như vòng lặp while tuy nhiên đoạn mã lệnh trong vòng lặp do while luôn được thực thi ít nhất một lần.
Cú pháp
<?php do{ // phần câu lệnh thực thi vòng lặp }while($bieu_thuc_dieu_kien); //phải có dấu chấm phẩu sau khi hết thúc dòng while ?>
Chú ý: Phải có dấu ;
ở phía sau while không chương trình sẽ báo lỗi.
Ví dụ
Liệt kê các số từ 1 tới 10 bằng cách sử dụng vòng lặp do while.
<?php $i = 1; //khởi tạo biến $i bằng 1 do { echo $i++; // cộng thêm 1 đơn vị sau mỗi lần lặp } while ($i <= 10); // nếu $i lớn hơn 10 dừng vòng lặp ?>
Tương tự như vòng lặp while, $i = 1
là biến dùng để lặp. Biểu thức $i <= 10
là điều kiện lặp. Bài toán sẽ thực hiện lặp cho đến khi $i = 10, vậy ta sẽ có 10 lần lặp và mỗi lần lặp biến $i sẽ tăng thêm 1 giá trị, như vậy ta sẽ có kết quả là lần lượt các số từ 1 đến 10 : 12345678910
Vòng lặp While, Do while lồng nhau
Tương tự như vòng lặp for và các mệnh đề quan hệ như if else thì cả 2 vòng lặp while và do while đều có thể lồng nhau.
Ví dụ 1: vẽ tam giác vuông với vòng lặp while lồng nhau.
<?php $i = 0; while ($i <= 10) { $j = $i; while ($j <= 10) { echo "*"; $j++; } echo "<br>"; $i++; } ?>
Ví dụ 2: vẽ tam giác vuông với vòng lặp do while lồng nhau.
<?php $i = 0; do { $j = $i; do { echo "*"; $j++; } while ($j <= 10); echo "<br>"; $i++; } while ($i <= 10); ?>
Khi nào nên sử dụng vòng lặp for, while, do while ?
Thông thường, đối với các bài toán khi đã biết rõ trước số lần cần lặp lại là bao nhiêu thì ta nên dùng vòng lặp for để thực hiện bài toán.
Còn đối với những bài toán không biết chính xác số vòng lặp thì ta nên dùng vòng lặp while hoặc do while.
Tuy nhiên ở một số bài toán, ta vẫn có thể sử dụng 3 vòng lặp trên để thực hiện theo 3 phương pháp khác nhau đều được. Tất cả là phụ thuộc vào kinh nghiệm của người lập trình, bạn sẽ là người quyết định nên dùng vòng lặp nào vào bài toán của bạn để nó chạy nhanh nhất và tối ưu hoá nhất cho chương trình của mình mà không phát sinh lỗi.
Kết thúc:
Thực ra vẫn còn 1 loại vòng lặp nữa là vòng lặp foreach. Nhưng mình sẽ nói riêng về vòng lặp này ở bài viết tiếp theo các bạn nhé!
Vòng lặp là một kiến thức cơ bản mà bạn nên nắm vững để sau này thực hiện nhiều bài toán trong dự án của bạn. Vì thế nếu có thắc mắc gì các bạn cứ để lại comment ở bên dưới bài viết mình sẽ cố gắng giải đáp nhé!
Xem thêm:
- Bài 2: Cú pháp trong PHP, Khai báo hằng và biến trong PHP
- Bài 3: Những kiểu dữ liệu trong PHP
- Bài 4: Toán tử và biểu thức trong PHP
- Bài 5: Biểu Thức Điều Kiện Trong PHP (Lệnh if, else, switch)