3.3 循环控制语句
循环语句是在满足条件的情况下反复地执行某一个操作。在PHP中,提供了4种循环控制语句,分别是while循环语句、do…while循环语句、for循环语句和foreach循环语句。
3.3.1 while循环语句
while循环语句,其作用是反复地执行某一项操作,是循环控制语句中最简单的一个,也是最常用的一个。while循环语句对表达式的值进行判断,当表达式为非0值时,执行while语句中的内嵌语句;当表达式的值为0值时,则不执行while语句中的内嵌语句。该语句的特点是:先判断表达式,后执行语句。while循环控制语句的操作流程如图3-11所示。
图3-11 while循环控制语句的操作流程
其语法如下:
只要while表达式expr的值为true,就重复执行嵌套中的statement语句,如果while表达式的值一开始就是false,则循环语句一次也不执行。
【例3-4】将10以内的偶数输出,若不是则不输出。
运行结果如下:
3.3.2 do…while循环语句
do…while语句也是循环控制语句中的一种,使用方式和while相似,也是通过判断表达式的值来输出循环语句。其语法如下:
该语句的操作流程是:先执行一次指定的循环体语句,然后判断表达式的值,当表达式的值为非0时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。其特点是先执行循环体,然后判断循环条件是否成立。do…while循环语句的操作流程如图3-12所示。
图3-12 do…while循环语句的操作流程
a)操作流程图 b)N-S流程图
【例3-5】通过do…while语句计算一个员工总的工龄工资增加情况。
运行结果如下:
前面我们已经说过,如果使用do…while语句计算员工的工龄工资,当变量a的值等于6时,会得到一个意想不到的结果。下面就来具体的操作一下,看具体会得到一个什么样的结果。定义变量a的值为6,重新执行示例,其代码如下。
运行结果为:
注:这就是while和do…while语句之间的区别。do…while语句是先执行后判断,无论表达式的值是否为TRUE,都将执行一次循环;而while语句则是首先判断表达式的值是否为TRUE,如果为TRUE则执行循环语句,否则将不执行循环语句。
do…while循环语句后边必须加上分号作为该语句的结束。
编写这个示例意在说明while语句与do…while语句在执行判断上的一个小小区别,在实际的程序开发中不会出现上述的这种情况。
3.3.3 for循环语句
for语句是PHP中最复杂的循环控制语句,拥有3个条件表达式。其语法如下:
for循环语句的参数说明如表3-2所示。
表3-2 for循环语句的参数介绍
其执行的过程:首先执行表达式1;然后执行表达式2,并对表达式2的值进行判断,如果值为true,则执行for循环语句中指定的内嵌语句,如果值为false,则结束循环,跳出for循环语句;最后执行表达式3(切忌是在表达式2的值为真时),返回表达式2继续循环执行。for循环语句的操作流程如图3-13所示。
图3-13 for循环语句的流程图
【例3-6】使用for循环来计算2~100所有偶数之和。
运行结果为:结果为:2550。
注:在编程时,有时会遇到使用for循环的特殊语法格式来实现无限循环。语法格式为:
对于这种无限循环可以通过break语句跳出循环。例如:
3.3.4 foreach循环语句
foreach循环控制语句自PHP4开始被引入,主要用于处理数组,是遍历数组的一种简单方法。如果将该语句用于处理其他的数据类型或者初始化的变量,将会产生错误。该语句的语法有两种格式。
参数array_expression是指定要遍历的数组,其中的$value是数组的值,$key是数组的键名;statement是满足条件时要循环执行的语句。
在第一种格式中,当遍历指定的array_expression数组时,每次循环时,将当前数组单元的值赋给变量$value,并且将数组中的指针移动到下一个单元。
在第二种格式中的应用是相同的,只是在将当前单元的值赋给变量$value的同时,将当前单元的键名也赋给了变量$key。
说明:
当使用foreach语句用于其他数据类型或者未初始化的变量时会产生错误。为了避免这个问题,最好使用is_array()函数先来判断变量是否为数组类型。如果是,再进行其他操作。
【例3-7】 foreach输出数组元素值的应用。
输出结果为: