计算机最擅长做的工作就是重复地执行一系列的命令。循环语句就是指定一系列的语句并规定一个条件,让计算机重复执行这些语句直到满足规定的条件为止。PHP 中提供了 for 循环、while 循环和 do…while 循环,下面就来介绍这些知识。
1、for 循环
for 循环使用灵活性比较高,是 PHP 中使用最频繁的循环语句。for 循环的一般形式如下所示:
for (表达式 1; 表达式 2; 表达式 3)
{
语句;
}
表达式 1 通常为赋值语句,用来初始化循环控制变量的初始值;表达式 2 通常为关系表达式或者逻辑表达式,用来确定何时停止循环;表达式 3 通常为递增或者递减表达式,用来对循环控制变量进行修改以逐步不满足表达式 2 的条件,否则就有可能造成无限循环。for 循环条件的流程图如图所示。
for 循环的执行过程如下:
(1)计算表达式 1 的值,为循环控制变量赋初值,该语句只在循环开始时执行一次;
(2)计算表达式 2 的值,如果其值为 TRUE,则执行循环体语句,否则退出循环;
(3)在每一次执行循环体语句结束后,运行一次表达式 3,以调整循环控制变量。然后返回第 2 步重新计算表达式 2 的值,依次重复,直到表达式 2 的条件不成立为止。
陌小雨给大家一个简单的例子吧:
<?php for($i=1;$i<=5;$i++){ echo "$i<br />"; //循环体 } ?>
代码运行结果:
1
2
3
4
5
for 循环的灵活之处就表现在它可以有多种形式,下面我们来分别介绍这些形式:
省略表达式 1:这种形式的表达式 1 通常写在 for 循环的外面。这种形式主要用在循环控制变量的初值不是已知常量,而是需要通过前面语句的执行计算得到的情况。
<?php $x=10; //初始化两个变量 $y=5; $z=$x-$y; //初始化变量 for(;$z<=5;$z++){ //省略表达式 1 的 for 循环 echo "$z<br />"; } ?>
代码运行结果:5
将以上代码中的$y 的值改为 7 后运行。代码运行结果
3
4
5
以上形式就是通过外部的运算来确定表达式 1 的值进而影响到 for 循环的次数。
省略表达式 2:因为表达式 2 默认值为 TRUE,因此这种形式如果在循环体中不加入跳转语句将会是一个无限循环。
省略表达式 3:这种形式的表达式 3 通常写在循环体内,在循环体内改变表达式的值,常用的形式如下所示:
<?php for($i=0;$i<=100;){ //省略表达式 3 ... $i=$x*3+4; //在内部修改其值 ... } ?>
上面介绍的是省略 for 循环中表达式的情况。for 循环不仅每个表达式可以为空,它的每个表达式还可以是由多个逗号分隔的表达式构成。
<?php for($x=1,$y=2,$z=3;$x<=1,$y<=3,$z<=5;$x++,$y++,$z++){ //多个逗号分隔的表达式 echo "$x$y$z<br />"; //输出三个变量的值 } >
代码运行结果:
123
234
345
从运行结果我们可以得知,程序循环只进行了三次,这是因为在 for 循环中的表达式 2 中,虽然所有用逗号分隔的表达式都会计算,但只取最后一个结果。因此$z 从 3 到 5 只用三次循环即可。
2、while 循环
while 循环与 for 循环相比使用比较简单,它通常用于不确定循环次数的情况,它的一般形式如下所示:
while (表达式)
{
语句;
}
while 循环在开始和每次执行循环体语句后均会判断表达式的值,如果为 TRUE,则执行循环体,如果为 FALSE 则退出 while 循环,它的执行流程图如图所示。
<?php $x=1; //初始化变量 while($x<=5){ //执行 while 循环 echo "$x<br />"; $x++; } ?>
代码运行结果:
1
2
3
4
5
我们使用 while 循环同样实现了输出数值 1~5。这里我们需要明白的一点是通常循环语句间是可以进行转换的。
3、do…while
do…while 循环与 while 类似,它的一般形式如下所示:
do
{
语句;
}
while (表达式)
do…whlie 循环会首先执行循环体中的语句一次然后再去判断表达式中的条件,如果为 TRUE 则继续执行循环体,为 FALSE 则退出循环。也就是说 do…while 循环会保证循环体被执行一次,它执行的流程图如图所示。
<?php $x=10; //初始化变量 x do{ echo "$x"; }while($x<5); ?>
代码运行结果:10
在代码中的判断条件虽然为 FALSE,但是循环体语句仍会执行一次,这就是 do…while 循环的特性。
除了以上介绍的三种循环语句之外,PHP 还支持 foreach 循环语句,它是专门用来操作数组的循环语句,因此该循环将在接下来课程数组学习部分进行讲解。