4.2 循环控制语句
在4.1节中学习了条件判断语句,可以根据条件选择执行不同的语句。但有时需要重复使用某段代码或函数,例如,如果要人工输入“1*2*3*4…*100”,无疑是非常烦琐的,但使用循环控制语句就能快速完成计算,下面来学习循环控制语句:while、do…while、for和foreach。
4.2.1 while循环语句
视频讲解:光盘\TM\lx\4\05 while循环语句.mp4
While语句是PHP中最简单的循环语句,它的语法格式如下:
while (表达式){ 语句; }
当表达式的值为真时,将执行循环体内的PHP语句,执行结束后,再返回到表达式继续进行判断。直到表达式的值为假才跳出循环,执行下面的语句。
while循环语句的流程控制图如图4.7所示。
图4.7 while语句的流程控制图
【例4.5】本例将实现10以内偶数的输出。1~10依次判断是否为偶数,如果是,则输出;如果不是,则继续下一次循环。实例代码如下:(实例位置:光盘\TM\sl\4\5)
<?php $num=1; //声明一个整型变量$num $str="10以内的偶数为:"; //声明一个字符变量$str while($num<=10){ //判断变量$num是否小于10 if($num % 2==0){ //如果小于10,则判断$num是否为偶数 $str.=$num.""; //如果当前变量为偶数,则添加到字符变量$str的后面 } $num++; //变量$num加1 } echo$str; //循环结束后,输出字符串$str ?>
结果为:10以内的偶数为:2 4 6 8 10
4.2.2 do…while循环语句
视频讲解:光盘\TM\lx\4\06 do…while循环语句.mp4
while语句还有另一种形式,即do…while。两者的区别在于,do…while要比while语句多循环一次。当while表达式的值为假时,while循环直接跳出当前循环;而do…while语句则是先执行一遍程序块,然后再对表达式进行判断。do…while语句的流程控制图如图4.8所示。
图4.8 do…while循环语句的流程控制图
【例4.6】下面通过两个语句的运行对比来了解两者的不同。实例代码如下:(实例位置:光盘\TM\sl\4\6)
<?php $num=1; //声明一个整型变量$num while($num! =1){ //使用while循环输出 echo"while循环"; //这句话不会输出 } do{ //使用do…while循环输出 echo"do…while循环"; //这句话会输出 }while($num ! = 1); ?>
结果为:do…while循环
4.2.3 for循环语句
视频讲解:光盘\TM\lx\4\07 for循环语句.mp4
for循环是PHP中最复杂的循环结构,它的语法格式如下:
for(初始化表达式;条件表达式;迭代表达式){ 语句; }
其中,初始化表达式在第一次循环时无条件取一次值;条件表达式在每次循环开始前求值,如果值为真,则执行循环体里面的语句,否则跳出循环,继续往下执行;迭代表达式在每次循环后被执行。for循环语句的流程控制图如图4.9所示。
图4.9 for循环语句的流程控制图
【例4.7】下面通过for循环来计算100的阶乘。实例代码如下:(实例位置:光盘\TM\sl\4\7)
<?php $sum=1; //声明整型变量$sum for ($i = 1; $i <=100; $i++){ $sum*=$i; //当$i小于100时,计算阶乘 } echo "100! = ".$sum; ?>
结果为:100! = 9.33262154439E+157
注意
在for语句中无论采用循环变量递增或递减的方式,前提是一定要保证循环能够结束,无期限的循环(死循环)将导致程序的崩溃。
4.2.4 foreach循环语句
视频讲解:光盘\TM\lx\4\08 foreach循环语句.mp4
foreach循环是PHP 4引进来的,只能用于数组。在PHP 5中,又增加了对对象的支持。该语句的语法格式如下:
foreach ($array as $value) 语句;
或
foreach ($array as $key => $value) 语句;
foreach语句将遍历数组$array,每次循环时,将当前数组中的值赋给$value(或$key和$value),同时,数组指针向后移动直到遍历结束。当使用foreach语句时,数组指针将自动被重置,所以不需要手动设置指针位置。
【例4.8】在本例中,应用foreach语句输出数组中存储的商品信息。实例代码如下:(实例位置:光盘\TM\sl\4\8)
<?php $name = array("1"=>"智能机器人", "2"=>"数码相机", "3"=>"天翼3G手机", "4"=>"瑞士手表"); $price = array("1"=>"14998元", "2"=>"2588元", "3"=>"2666元", "4"=>"66698元"); $counts = array("1"=>1, "2"=>1, "3"=>2, "4"=>1); echo '<table width="580" border="1" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#c17e50"> <tr> <td width="145"align="center"bgcolor="#FFFFFF" class="STYLE1">商品名称</td> <td width="145"align="center"bgcolor="#FFFFFF" class="STYLE1">价格</td> <td width="145"align="center"bgcolor="#FFFFFF" class="STYLE1">数量</td> <td width="145"align="center"bgcolor="#FFFFFF" class="STYLE1">金额</td> </tr>'; foreach($name as$key=>$value){ //以book数组做循环,输出键和值 echo '<tr> <td height="25" align="center" bgcolor="#FFFFFF" class="STYLE2">'.$value.'</td> <td align="center" bgcolor="#FFFFFF" class="STYLE2">'.$price[$key].'</td> <td align="center" bgcolor="#FFFFFF" class="STYLE2">'.$counts[$key].'</td> <td align="center" bgcolor="#FFFFFF" class="STYLE2">'.$counts[$key]*$price[$key].'</td> </tr>'; } echo '</table>'; ?>
运行结果如图4.10所示。
图4.10 使用foreach语句输出数组
注意
当试图使用foreach语句用于其他数据类型或者未初始化的变量时会产生错误。为了避免这个问题,最好使用is_array()函数先来判断变量是否为数组类型。如果是,再进行其他操作。