在PHP中,while 循环是 PHP 中最基本的循环类型,其行为与 C 语言中的 while 循环完全相同;而do-while 循环和 while 循环在结构上非常相似,区别在于do-while 循环的表达式值是在每次循环结束时进行检查,而 while 循环则是在开始时进行检查。
一、while语句
while 循环是 PHP 中最简单的循环类型,与C语言中的 while 循环地一样。while 语句的基本格式是:
while (expr) statement
while 语句在 PHP 中的作用是,只要 while 表达式的值为 true,就会重复执行嵌套中的循环语句。这个表达式的值会在每次开始循环时进行检查,因此即使它在循环语句中发生了变化,也不会影响循环的执行。如果 while 表达式的初始值就是 false,那么循环语句将不会执行一次。
和 if 语句一样,可以在 while 循环中用花括号括起一个语句组,或者用替代语法:
while (expr): statement ... endwhile;
下面两个例子完全一样,都显示数字 1 到 10:
<?php /* 示例 1 */ $i = 1; while ($i <= 10) { echo $i++; /* 在自增前(后自增)打印的值将会是 $i */ } /* 示例 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile; ?>
二、do-while语句
do-while 循环只有一种语法:
<?php $i = 0; do { echo $i; } while ($i > 0); ?>
以上循环将正好运行一次,因为经过第一次循环后,当检查表达式的真值时,其值为 false($i 不大于 0)而导致循环终止。
资深的 C 语言用户可能熟悉另一种不同的 do-while 循环用法。在这种用法中,将语句放在 do-while(0) 之中,然后在循环内部使用 break 语句来结束执行循环。以下代码片段示范了此方法:
<?php do { if ($i < 5) { echo "i is not big enough"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } echo "i is ok"; /* process i */ } while(0); ?>
还可以使用 goto 跳出循环,取代这种 hack 的方式。下面是一个使用 goto 语句跳出循环的示例:
#include <stdio.h> int main() { int i = 0; while (1) { printf("%d\n", i); i++; if (i > 5) { goto end; // 跳转到标签 end } } end: return 0; }
在这个例子中,当 i 的值大于 5 时,程序会执行 goto 语句,跳转到标签 end。在标签 end 处,程序将结束循环并退出。
三、两者区别
do-while 循环和 while 循环都属于循环结构,然而它们在执行方式上存在显著的差异。两者的主要区别在于循环条件的检查时间点以及循环体是否一定会被执行。
具体来说,while 循环的特点是先检查循环条件是否为真,如果条件为真则执行循环体内的语句,然后在每次循环结束时再次检查条件。如果条件仍然为真,则继续执行循环,否则终止循环。相反,do-while 循环会先执行一次循环体内的语句,然后再检查条件。无论条件是否为真,do-while 循环都将至少执行一次循环体内的语句。
总之,与 while 循环相比,do-while 循环能够保证至少执行一次循环体内的语句,这是因为它先执行语句然后才进行条件判断。而在一般的 while 循环中,如果一开始就满足条件判断为 false,那么整个循环可能就不会执行。