PHP - DoWhile 循环
“do...while” 循环是 PHP 中另一种循环结构。这种循环类似于 while 循环,不同之处在于测试条件在每次迭代结束时检查,而不是在新迭代开始时检查。
while 循环在进入循环前验证真值条件,而在 “do...while” 循环中,真值条件在重新进入循环前验证。因此,“do...while” 循环保证至少执行一次迭代,无论真值条件如何。
DoWhile 循环的流程图
下图通过比较流程图展示了 “while” 循环和 “do...while” 循环的区别。
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