PHP从入门到精通(第5版)
上QQ阅读APP看书,第一时间看更新

4.2 循环控制语句

在4.1节中学习了条件判断语句,可以根据条件选择执行不同的语句。但有时需要重复使用某段代码或函数,例如,如果要人工输入“1×2×3×4×…×100”,无疑是非常烦琐的,但使用循环控制语句就能快速完成计算,下面来学习循环控制语句:while、do…while、for和foreach。

4.2.1 while循环语句

while语句是PHP中最简单的循环语句,它的语法格式如下:

    while (表达式){
        语句;
    }

当表达式的值为真时,将执行循环体内的PHP语句,执行结束后,再返回到表达式继续进行判断。直到表达式的值为假才跳出循环,执行下面的语句。

while循环语句的流程控制图如图4.7所示。

图4.7 while语句的流程控制图

【例4.5】本例将实现10以内(包括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循环语句

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循环语句

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循环语句

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){         //以$name数组做循环,输出键和值
         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()函数先来判断变量是否为数组类型。如果是,再进行其他操作。