PHP从入门到精通(第4版)(软件开发视频大讲堂)
上QQ阅读APP看书,第一时间看更新

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()函数先来判断变量是否为数组类型。如果是,再进行其他操作。