PHP - Do…While 迴圈



“do…while”迴圈是 PHP 中另一種迴圈結構。這種型別的迴圈類似於while迴圈,但測試條件是在每次迭代結束時檢查,而不是在新迭代開始時檢查。

while迴圈在進入迴圈之前驗證真值條件,而在“do…while”迴圈中,真值條件在重新進入迴圈之前驗證。因此,“do…while”迴圈保證至少執行一次迭代,無論真值條件如何。

下圖透過使用兩種迴圈的比較流程圖表示,展示了“while”迴圈和“do…while”迴圈的區別。

PHP Do While Loop

構成“do…while”迴圈的語法與其在 C 語言中的對應部分類似。

do {
   statements;
}
while (expression);

示例

這是一個“do…while”迴圈的簡單示例,它列印迭代編號 1 到 5。

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

它將產生以下輸出

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

示例

以下程式碼使用while迴圈,也生成相同的輸出:

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

因此,可以說“do…while”和“while”迴圈的行為類似。但是,當計數器變數(在本例中為$i)的初始值設定為大於 while 關鍵字前面的括號中測試表達式中使用的值時,差異將變得明顯。

示例

在以下程式碼中,使用了while和“do…while”這兩個迴圈。while迴圈的計數器變數是$i,而“do…while”迴圈的計數器變數是$j。兩者都初始化為 10(任何大於 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);
?>

它將產生以下輸出

while Loop
do - while Loop
Iteration No: 10

結果表明,while迴圈不執行任何迭代,因為條件在開始時就是假($i初始化為 10,大於測試條件$i<=5)。另一方面,“do…while”迴圈即使計數器變數$j初始化為大於測試條件的值,也經歷第一次迭代。

因此,我們可以推斷,“do…while”迴圈保證至少執行一次迭代,因為測試條件是在迴圈塊結束時驗證的。while迴圈可能不執行任何迭代,因為測試條件是在進入迴圈塊之前驗證的。

另一個語法差異是“do…while”中的while語句以分號結束。對於while迴圈,括號後面跟著一個花括號括起來的迴圈塊。

除此之外,沒有其他差異。可以互換使用這兩種型別的迴圈。

遞減“do…while”迴圈

要設計一個遞減計數的“do…while”,請將計數器變數初始化為較高的值,在迴圈內使用遞減運算子(--)來減少每次迭代的計數器值,並在while括號中設定測試條件,以使迴圈執行到計數器大於所需最後一個值為止。

示例

在下面的示例中,計數器從 5 遞減到 1。

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

它將產生以下輸出

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

反向遍歷字串

在 PHP 中,字串可以被視為字元的索引陣列。我們可以透過執行遞減的“do…while”迴圈,從後到前一次提取並顯示一個字元,如下所示:

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

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

它將產生以下輸出

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

巢狀“do…while”迴圈

for迴圈或while迴圈一樣,您也可以編寫巢狀的“do…while”迴圈。在下面的示例中,上層“do…while”迴圈使用$i計數迭代,內部“do…while”迴圈遞增$j,並且每次列印$i*j的乘積,從而列印從 1 到 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);
?>

它將產生以下輸出

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
廣告