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