28/09/2018, 16:25

Vòng Lặp PHP

Vòng lặp là một mã lệnh trong đó chương trình được thực hiện lặp đi lặp lại nhiều lần cho đến khi thỏa một điều kiện nào đó. Vòng lặp là một khái niệm cơ bản trong lập trình cấu trúc.

Vòng lặp trong PHP được sử dụng để thực thi cùng một khối code một số lần nào đó đã xác định. PHP hỗ trợ 4 kiểu vòng lặp sau:

  • Vòng lặp for − Lặp qua một khối code một số lần đã xác định.

  • Vòng lặp while − Lặp qua một khối code nếu và miễn là một điều kiện đã xác định là true.

  • Vòng lặp do...while − Lặp qua một khối code một lần, và sau đó lặp lại vòng lặp đó miễn là một điều kiện đã cho là true.

  • Vòng lặp foreach − Lặp qua một khối code cho mỗi phần tử trong một mảng.

 

Vòng lặp for trong PHP

Lệnh for được sử dụng khi bạn biết trước bao nhiêu lần bạn muốn thực thi một lệnh hoặc một khối lệnh trong PHP.

Cú Pháp

for ($bien_dieu_khien; $bieu_thuc_dieu_kien; $bieu_thuc_thay_doi_bien_dieu_kien)
{
   phần code để thực thi
}
  • $bien_dieu_khien: là một câu lệnh gán giá trị ban đầu cho biến điều khiển trước khi thực hiên vòng lặp, hoặc là một biến có giá trị sẵn mà ta đã truyền vào cho nó trước khi tạo vòng lặp này, lệnh này được thực hiện duy nhất một lần.
  • $bieu_thuc_dieu_kien: là một biểu thức quan hệ xác định điều kiện thoát khỏi vòng lặp.
  • $bieu_thuc_thay_doi_bien_dieu_khien: Xác định biến điều khiển sẽ bị thay đổi như thế nào sau mỗi lần lặp được lặp lại (thường là tăng hoặc giảm giá trị của biến điều khiển).

Ba biểu thức trên được cách nhau bởi dấu chấm phẩy, vòng lặp sẽ lặp khi biểu thức điều kiện đúng, khi biểu thức điều kiện sai thì vòng lặp sẽ dừng và thoát, và ta sử dụng các toán tử quan hệ và toán tử logic trong các biểu thức điều kiện để điều khiển vòng lặp.

Ví Dụ

         $a = 0;
         $b = 0;
         
         for( $i=0; $i<5; $i++ )
         {
            $a += 10;
            $b += 5;
         }
         
         echo ("Sau vòng lặp, giá trị a=$a và b=$b" );
         // Kết quả là a = 50 b = 25 vì chúng được lặp lại 5 lần

Vòng lặp for lồng nhau

Giống như câu điều kiện if, vòng lặp for trong php có thể lồng nhau để xử lý bài toán. Ở mỗi vòng lặp cha thì vòng lặp con sẽ được thực hiện (vòng lặp con lặp cho đến hết), điều này tuân thủ theo quy tắc phải thực hiện hết nội dung dòng lệnh bên trong vòng lặp mới thực hiện vòng kế tiếp.

for ($i = 0; $i < 10; $i++) {
        for ($j = 9; $j >= $i ; $j--) {
          echo $j;
        }
        echo '<br>';
      }
      //Kết quả sẽ là 
      // 9876543210
      // 987654321
      // 98765432
      // 9876543
      // 987654
      // 98765
      // 9876
      // 987
      // 98
      // 9

Tổng số lần lặp chính là bằng tích số lần lặp của 2 vòng lặp cộng thêm số lần lặp của vòng lặp cha. Ví dụ vòng lặp 1 lặp 10 lần, vòng lặp 2 lặp 10 lần thì tổng số vòng lặp sẽ là 10 x 10 + 10 = 110 lần. Vì thế chi phí để vòng lặp for lặp lồng nhau rất cao.

Vòng lặp while trong PHP

Lệnh while trong PHP sẽ thực thi một khối code nếu và miễn là một điều kiện đã xác định là true.

Nếu điều kiện đã cho là true, thì khối code sẽ được thực thi. Sau khi code được thực thi, thì biểu thức điều kiện sẽ được ước lượng một lần nữa, và vòng lặp tiếp tục thực thi tới khi biểu thức điều kiện là false.

Cú Pháp

while ($condition) {
    // dòng lệnh
}

Trong đó $condition là điều kiện để dừng vòng lặp. Nếu $condition có giá trị false thì vòng lặp kết thúc, ngược lại vòng lặp sẽ tiếp tục lặp. 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 đúng.

Ví Dụ

Ví dụ sau giảm giá trị một biến qua mỗi lần lặp và tăng giá trị biến đếm tới khi nó đạt đến 10, thì sự ước lượng là false và vòng lặp kết thúc.

         $i = 0;
         $num = 30;
         
         while( $i < 10)
         {
            $num--;
            $i++;
         }
         
         echo ("Vòng lặp dừng tại giá trị i = $i và num = $num" );
         //Kết quả là i = 10 num = 20

Ví dụ 2

$i = 0;
$j = 10;
while ($i < 100 && $j > 5){
    $i++;
    $j -= 2;
}
echo $i.'-';
echo $j;
//kết quả là i = 3 và j = 4

Lệnh vòng lặp do…while trong PHP

 

Lệnh do…while sẽ thực thi một khối code ít nhất một lần. Sau đó nó sẽ lặp lại vòng lặp miễn là điều kiện là true.

Vòng lặp while sẽ kiểm tra điều kiện trước rồi thực hiện câu lệnh bên trong vòng lặp, còn vòng lặp do while thì ngược lại sẽ thực hiện câu lệnh bên trong vòng lặp 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 trong php luôn luôn thực hiện ít nhất một lần lặp vì nó thực hiện trước rồi mới kiểm tra điều kiện.

Cú pháp

do {
    // dòng lệnh
} while ($condition);
//Cách bạn nhớ có ; sau while nhé

Ví Dụ

$i = 1;
do{
    echo $i;
    $i++;
}while ($i <= 10);
//Kết quả là từ 1 - 10

Chương trình này thực hiện xuất ra màn hình các số từ 1 tới 10. Giải thích tương tự như while, ở mỗi bước lặp sẽ xuất ra màn hình biến $i, sau đó tăng $i lên 1, và cuối cùng kiểm tra điều kiện nếu ($i <= 10) đúng thì sẽ lặp vòng tiếp theo,  ngược lại sẽ dừng vòng lặp.

Ví Dụ 2

$i = 1;
do{
    echo $i;
    $i++;
}while ($i < 1);
//Kết quả là 1 vì được lặp 1 lần vì thực hiện do xong mới đến kiểm tra điều kiện while.Đó là
lý do vì sao vòng lặp này luôn lặp 1 lần 

Lệnh vòng lặp foreach trong PHP

Lệnh vòng lặp foreach được sử dụng để lặp qua một mảng. Với mỗi lần lặp, giá trị cho phần tử mảng hiện tại được gán cho $value và con trỏ mảng được di chuyển tới phần tử kế tiếp và trong lần lặp tiếp theo thì phần tử kế tiếp sẽ được xử lý.

Cú pháp

foreach ($array as $key => $value){
    // Các dòng lệnh
}

Hoặc

foreach ($array as $value){
    // Các dòng lệnh
}

Trong đó $array là mảng cần lặp,$key là số chỉ mục (mảng có chỉ mục) hoặc là key (trong mảng kết hợp), $value là giá trị của phần tử ở vị trí $key.

Ví Dụ

$nam = array(
    1990,
    1991,
    1992,
    1993,
    1994,
    1995
);
  
//Dùng foreach xuất ra các năm trong $nam
foreach ($nam as $value){
    echo $value;
}
//Kết quả là hiện tất cả dữ liệu trong mảng

Nếu để ý kỹ thì các bạn sẽ thấy trong vòng lặp tôi chỉ truyền $nam vào, còn $key và $value không thay đổi, phải chăng nó luôn luôn như vậy? Câu trả lời là không phải, bạn có thể đặt nó là một cái tên bất kì nhé, ví dụ chương trình sau là tương đương:

Ví Dụ 2

$nam = array(
    1990,
    1991,
    1992,
    1993,
    1994,
    1995
);
  
//Dùng foreach xuất ra các năm trong $nam
foreach ($nam as $chimuc => $giatri){
    echo $chimuc . ' => ' . $giatri.'<br>';
}
//Kết quả 
// 0 => 1990
// 1 => 1991
// 2 => 1992
// 3 => 1993
// 4 => 1994
// 5 => 1995

Ví Dụ 3

$arr =[
      1 => 'bui',
      2 => 'huu',
    ];
    $a = 'huu';
    $b = '';

    foreach ($arr as $key => $value) {

      if ($a == $value) {
        $b = $key;
      }
    }

Vòng lặp foreach tự động lặp qua các phần tử trong mảng, nó lặp cho khi nào tới phần tử cuối cùng thì thôi. Như ở ví dụ trên thì $nam là mảng ta truyền vào, $key và $value là 2 tham số mà ở mỗi vòng lặp nó tự động truyền giá trị vào đó và chúng ta chỉ việc sử dụng. 

Cảm ơn các bạn đã theo dõi bài viết này.Nhớ like và share ủng hộ mình nhé :)

+7