PHP do while 循环怎么用?

文章导读
上一个 测验 下一个 “do...while” 循环是 PHP 中另一种循环结构。这种循环类似于 while 循环,不同之处在于测试条件在每次迭代结束时检查,而不是在新迭代开始时检查。
📋 目录
  1. DoWhile 循环的流程图
  2. Do...While 语句的语法
  3. DoWhile 循环的基本示例
  4. 使用 While 循环
  5. 同时使用 While 和 DoWhile 循环
  6. 递减 do-while 循环
  7. 逆序遍历字符串
  8. 嵌套 do-while 循环
  9. break 语句
  10. continue 语句
A A

PHP - DoWhile 循环



上一个
测验
下一个

“do...while” 循环是 PHP 中另一种循环结构。这种循环类似于 while 循环,不同之处在于测试条件在每次迭代结束时检查,而不是在新迭代开始时检查。

while 循环在进入循环前验证真值条件,而在 “do...while” 循环中,真值条件在重新进入循环前验证。因此,“do...while” 循环保证至少执行一次迭代,无论真值条件如何。

DoWhile 循环的流程图

下图通过比较流程图展示了 “while” 循环和 “do...while” 循环的区别。

PHP Do While Loop

Do...While 语句的语法

构成 “do...while” 循环的 syntax 与 C 语言中的类似。

do {
   statements;
}
while (expression);

DoWhile 循环的基本示例

以下是一个简单的 “do...while” 循环示例,它打印迭代编号 1 到 5。

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

输出

它将产生以下输出 −

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

使用 While 循环

以下代码使用 while 循环,也会生成相同的输出 −

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

因此,可以说 “do...while” 和 “while” 循环行为相似。然而,当计数器变量(在本例中为 $var)的初始值设置为大于 while 关键字前括号中测试表达式的值时,区别就会显现。

同时使用 While 和 DoWhile 循环

在以下代码中,同时使用了 while 和 “do...while” 循环。while 循环的计数器变量为 $var,而 “do...while” 循环的计数器变量为 $j。两者均初始化为 10(大于 5 的任意值)。

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

   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 循环没有执行任何迭代,因为条件从一开始就为假($var 初始化为 10,大于测试条件 $var<=5)。另一方面,“do...while” 循环即使计数器变量 $j 初始化为大于测试条件的值,也会执行第一次迭代。

while 和 do...while 循环的区别

因此可以推断,“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 = "";
   $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”循环使用 $var 计数,内层的“do-while”循环递增 $j,并每次打印 $var*$j 的乘积,从而打印从 1 到 10 的乘法表。

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

   do{
      print "\n";
      do{
         $k = sprintf("%4u",$var*$j);
         print "$k";
         $j++;
      } 
      while ($j<=10);
      $j=1;
      $var++;
   }
   while ($var<=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

break 语句

在下面的示例中,我们在 do...while 循环中使用 break 语句。即使条件仍然为真,使用 break 语句也可以终止循环 −

<?php
   $var = 3;

   do {
   if ($var == 6) break;
   echo $var;
   $var++;
   } while ($var < 9);
?> 

输出

以上代码的输出如下 −

345

continue 语句

现在,我们在 do-while 循环中使用 continue 语句。因此,使用 continue 语句可以终止当前迭代并继续下一个任务 −

<?php
   $var = 0;

   do {
   $var++;
   if ($var == 6) continue;
   echo $var;
   } while ($var < 9);
?> 

输出

以上代码的输出如下 −

12345789