PHP - Do…While Loop

Vòng lặp "do…while" là một cấu trúc lặp khác có sẵn trong PHP. Loại vòng lặp này tương tự như vòng lặp while , ngoại trừ việc điều kiện kiểm tra được kiểm tra ở cuối mỗi lần lặp thay vì ở đầu một lần lặp mới.

Vòng lặp while xác minh điều kiện đúng trước khi vào vòng lặp, trong khi trong vòng lặp "do…while", điều kiện đúng được xác minh trước khi vào lại vòng lặp. Do đó, vòng lặp "do…while" được đảm bảo có ít nhất một lần lặp lại bất kể điều kiện đúng như thế nào.

Hình dưới đây cho thấy sự khác biệt giữa vòng lặp "while" và vòng lặp "do…while" bằng cách sử dụng một biểu đồ luồng so sánh giữa hai loại vòng lặp này.

PHP Do While Loop

Điều syntax để cấu thành một vòng lặp "do…while" tương tự như đối tác của nó trong ngôn ngữ C.

do {
   statements;
}
while (expression);

Example

Dưới đây là một ví dụ đơn giản về vòng lặp "do…while" in ra các số lần lặp từ 1 đến 5.

<?php
   $i=1;
   do{
      echo "Iteration No: $i \n";
      $i++;
   }
   while ($i<=5);
?>

Nó sẽ tạo ra output

Iteration No: 1 
Iteration No: 2 
Iteration No: 3 
Iteration No: 4 
Iteration No: 5

Example

Đoạn mã sau sử dụng một vòng lặp while và cũng tạo ra cùng một đầu ra -

<?php
   $i=1;
   while ($i<=5){
      echo "<h3>Iteration No: $i</h3>";
      $i++;
   }         
?>

Vì vậy, có thể nói rằng vòng lặp "do…while" và "while" hoạt động tương tự. Tuy nhiên, sự khác biệt sẽ rõ ràng khi giá trị ban đầu của biến đếm (trong trường hợp này là $i ) được đặt thành bất kỳ giá trị nào lớn hơn giá trị được sử dụng trong biểu thức kiểm tra trong dấu ngoặc ở trước từ khóa while .

Example

Trong đoạn mã sau, cả hai vòng lặp – while và " do…while " – đều được sử dụng. Biến đếm cho vòng lặp while $i và cho vòng lặp "do…while", nó là $j . Cả hai đều được khởi tạo với giá trị 10 (bất kỳ giá trị nào lớn hơn 5).

<?php
   echo "while Loop \n";
   $i=10;
   while ($i<=5){
      echo "Iteration No: $i \n";
      $i++;
   }   

   echo "do-while Loop \n"; 
   $j=10;
   do{
      echo "Iteration No: $j \n";
      $j++;
   }
   while ($j<=5);
?>

Nó sẽ tạo ra output

while Loop
do - while Loop
Iteration No: 10

Kết quả cho thấy vòng lặp while không thực hiện bất kỳ lần lặp nào vì điều kiện là sai ngay từ đầu ( $i được khởi tạo với giá trị 10, lớn hơn điều kiện kiểm tra $i<=5 ). Mặt khác, vòng lặp "do…while" vẫn trải qua lần lặp đầu tiên mặc dù biến đếm $j được khởi tạo với giá trị lớn hơn điều kiện kiểm tra.

Chúng ta có thể suy ra rằng vòng lặp "do…while" đảm bảo ít nhất một lần lặp vì điều kiện kiểm tra được xác minh ở cuối khối lặp. Vòng lặp while có thể không thực hiện bất kỳ lần lặp nào vì điều kiện kiểm tra được xác minh trước khi vào khối lặp.

Một sự khác biệt về cú pháp khác là câu lệnh while trong "do…while" kết thúc bằng dấu chấm phẩy. Trong trường hợp của vòng lặp while , dấu ngoặc đơn được theo sau bởi một khối lặp được bao bởi dấu ngoặc nhọn.

Ngoài những điều này, không có sự khác biệt nào. Người ta có thể sử dụng cả hai loại vòng lặp này thay thế cho nhau.

Decrementing a "do…while" Loop

Để thiết kế một cấu trúc "do…while" với biến đếm giảm, hãy khởi tạo biến đếm với một giá trị cao hơn, sử dụng toán tử giảm (--) bên trong vòng lặp để giảm giá trị của biến đếm ở mỗi lần lặp, và đặt điều kiện kiểm tra trong dấu ngoặc đơn while để chạy vòng lặp cho đến khi biến đếm lớn hơn giá trị cuối cùng mong muốn.

Example

Trong ví dụ dưới đây, bộ đếm giảm từ 5 xuống 1.

<?php
   $j=5;
   do{
      echo "Iteration No: $j \n";
      $j--;
   }
   while ($j>=1);
?>

Nó sẽ tạo ra output

Iteration No: 5
Iteration No: 4
Iteration No: 3
Iteration No: 2
Iteration No: 1

Traverse a String in Reverse Order

Trong PHP, một chuỗi có thể được coi là một mảng chỉ mục của các ký tự. Chúng ta có thể trích xuất và hiển thị một ký tự tại một thời điểm từ cuối lên đầu bằng cách chạy một vòng lặp "do…while" giảm dần như sau −

<?php
   $string = "TutorialsPoint";
   $j = strlen($string);

   do{
      $j--;
      echo "Character at index $j : $string[$j] \n";
   }
   while ($j>=1);
?>

Nó sẽ tạo ra output

Character at index 13 : t
Character at index 12 : n
Character at index 11 : i
Character at index 10 : o
Character at index 9 : P
Character at index 8 : s
Character at index 7 : l
Character at index 6 : a
Character at index 5 : i
Character at index 4 : r
Character at index 3 : o
Character at index 2 : t
Character at index 1 : u
Character at index 0 : T

Nested "do…while" Loops

Giống như vòng lặp for hoặc vòng lặp while , bạn cũng có thể viết các vòng lặp "do…while" lồng nhau. Trong ví dụ sau, vòng lặp "do…while" bên ngoài đếm số lần lặp với $i , vòng lặp "do…while" bên trong tăng $j và mỗi lần in ra tích của $i*j , do đó in ra bảng từ 1 đến 10.

<?php
   $i=1;
   $j=1;

   do{
      print "\n";
      do{
         $k = sprintf("%4u",$i*$j);
         print "$k";
         $j++;
      } 
      while ($j<=10);
      $j=1;
      $i++;
   }
   while ($i<=10);
?>

Nó sẽ tạo ra output

1   2   3   4   5   6   7   8   9  10
2   4   6   8  10  12  14  16  18  20
3   6   9  12  15  18  21  24  27  30
4   8  12  16  20  24  28  32  36  40
5  10  15  20  25  30  35  40  45  50
6  12  18  24  30  36  42  48  54  60
7  14  21  28  35  42  49  56  63  70
8  16  24  32  40  48  56  64  72  80
9  18  27  36  45  54  63  72  81  90
10  20  30  40  50  60  70  80  90 100