专题讲座:光盘\MR\Video\5\循环语句.exe
视频速递:深入了解循环语句
循环语句是在满足条件的情况下反复地执行某一个操作。在PHP中,提供四个循环控制语句,分别是:while循环语句、do while循环语句、for循环语句和foreach循环语句。
while循环语句,其作用是反复地执行某一项操作。它是循环控制语句中最简单的一个,也是最常用的一个。while循环语句对表达式的值进行判断,当表达式为非0值时,执行while语句中的内嵌语句;当表达式的值为0值时,则不执行while语句中的内嵌语句。该语句的特点是:先判断表达式,后执行语句。while循环控制语句的操作流程如图5.15所示。
其语法如下。
只要while表达式expr的值为TRUE,就重复执行嵌套中的statement语句,如果while表达式的值一开始就是False,则循环语句一次也不执行。
【例5.5】 下面以实例的形式展现while语句的相关应用。
实例位置:光盘\MR\ Instance\5\5.5
本实例的主要内容是计算员工的工龄工资。正式员工在单位工作每增加一年,工龄工资增长50,以10年为上限,计算一个员工总的工龄工资增加情况,核心代码如下。
运行结果如图5.16所示。
图 5.15 while循环控制语句的操作流程
图 5.16 计算员工的工龄工资
do…while语句也是循环控制语句中的一种,使用方式和while相似,也是通过判断表达式的值来输出循环语句。其语法如下。
图 5.17 do…while循环语句的操作流程
该语句的操作流程是:先执行一次指定的循环体语句,然后判断表达式的值,当表达式的值为非0时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。其特点是先执行循环体,然后判断循环条件是否成立。do…while循环语句的操作流程如图5.17所示。
do…while语句是先执行后判断,无论表达式的值是否为TRUE,都将执行一次循环;而while语句则是首先判断表达式的值是否为TRUE,如果为TRUE则执行循环语句;否则将不执行循环语句。
【例5.6】 下面通过实例介绍do…while语句和while语句的区别,同样以计算员工的工龄工资为例,判断当员工工作到第10个年头,是否还有工龄工资。
如果使用while语句进行判断,那么当变量$year的值为10时,已经超出表达式的值,即将不会再继续计算工龄工资。如果使用do…while语句进行判断,那么当变量$year的值为10时,程序没有停止,它将会继续输出员工第11年的工龄工资后停止,本实例核心代码如下。
图 5.18 计算员工的工龄工资
运行结果如图5.18所示。
编写这个实例意在说明while语句与do…while语句在执行判断上的一个小小区别,在实际的程序开发中是不会出现上述这种情况的。
for语句是PHP中最复杂的循环控制语句,拥有三个条件表达式,其语法如下。
for循环语句的参数说明如表5.1所示。
表 5.1 for循环语句的参数说明
其执行的过程:首先执行表达式1;然后执行表达式2,并对表达式2的值进行判断,如果值为真,则执行for循环语句中指定的内嵌语句,如果值为假,则结束循环,跳出for循环语句;最后执行表达式3(切忌是在表达式2的值为真时),返回表达式2继续循环执行。for循环语句的操作流程如图5.19所示。
【例5.7】 下面笔者使用for循环来计算2~100之间所有偶数之和。
实例位置:光盘\MR\ Instance\5\5.7
本实例核心代码如下。
运行结果如图5.20所示。
图 5.19 for循环语句的流程图
图 5.20 计算2~100之间所有偶数之和
在编程时,有时会遇到使用for循环的特殊语法格式来实现无限循环,语法格式为。格式为。
对于这种无限循环可以通过break语句跳出循环,例如:
foreach循环控制语句自PHP 4.0开始被引入,主要用于处理数组,是遍历数组的一种简单方法。如果将该语句用于处理其他的数据类型或者初始化的变量,将会产生错误,该语句的语法有两种格式。
参数array_expression是指定要遍历的数组,其中$value是数组的值,$key是数组的键名;statement是满足条件时要循环执行的语句。
在第一种格式中,当遍历指定的array_expression数组时,每次循环时,将当前数组单元的值赋给变量$value,并且将数组中的指针移动到下一个单元。
在第二种格式中的应用是相同的,只是在将当前单元的值赋给变量$value的同时,将当前单元的键名也赋给了变量$key。
当foreach语句用于其他数据类型或者未初始化的变量时会产生错误。为了避免这个问题,最好使用is_array()函数先来判断变量是否为数组类型。如果是,再进行其他操作。
【例5.8】 foreach语句的应用很广泛,主要功能是处理数组,下面应用foreach语句处理一个数组,实现输出购物车中商品的功能。这里假设将购物车中的商品存储于指定的数组中,然后通过foreach语句来输出购物车中的商品信息。
本实例实现的步骤为:首先定义三个数组并为数组添加初始元素,其次利用foreach语句遍历数组并循环输出数组元素,关键代码如下。
图 5.21 应用foreach语句输出购物车中商品
运行结果如图5.21所示。
在与数据库交互的简单操作中,经常使用while循环语句来遍历数据表中的每一条数据。这不是说输出数据库中的数据只能使用while循环语句,而是while循环语句较其他语句更方便,像大家熟知的for循环语句,也可以实现数据库数据的循环输出,但是必须应用指针的知识,指定每循环一次,指针向下移动一个单位。“伟大的”程序员往往都很懒惰,所以这大大增加了while循环语句的使用频率。
【例5.9】 下面通过简单的实例讲解应用while循环控制语句输出数据库中的数据。
实例位置:光盘\MR\ Instance\5\5.9
(1)首先利用mysql_connect()函数连接MySQL服务器,通过mysql_select_db()函数连接数据库,通过mysql_query()函数定义页面的编码风格,编写查询SQL语句,执行查询操作。利用mysql_fetch_row()函数返回一条数据,并将值保存在变量名为$rst的数组变量中。
(2)利用while循环语句遍历数据表中数据,其中还定义了HTML的表格标签,同样利用while的循环语句结构,根据数据表中数据的条数动态地插入表格。
图 5.22 利用while循环输出数据三
运行结果如图5.22所示。
如例5.9所述,每个函数或语句都有其各自的特点,while循环语句在数据库查询操作中比较常见,而在程序的逻辑操作中for循环语句似乎更加轻便、更加高效一些。除特定环境下如do…while()语句。所以很好地掌握for循环语句是十分必要的。
【例5.10】 本实例是利用for循环语句开发一个乘法口诀表,并将计算结果打印在特定的表格中。
编写两个嵌套的for循环,外层for循环将循环变量$i初始值定义为1,最大值定义为9,每循环一次做后置自增运算,循环输出表格的<table>标签和<table>标签内部的<tr>列标签。在内层循环中将循环变量$j的最大值定义为小于等于$i,这样做的目的是为了达到输出的表格呈现楼梯式的台阶效果。其他参数与外层循环变量相同,循环输出<td>标签和计算结果,代码如下。
图 5.23 乘法口诀表的制作
运行结果如图5.23所示。