- PHP+MySQL Web应用开发教程
- 李辉等编著
- 1505字
- 2021-03-27 03:04:06
3.3 循环控制语句
循环语句是在满足条件的情况下反复地执行某一个操作。在PHP中,提供了4种循环控制语句,分别是while循环语句、do…while循环语句、for循环语句和foreach循环语句。
3.3.1 while循环语句
while循环语句,其作用是反复地执行某一项操作,是循环控制语句中最简单的一个,也是最常用的一个。while循环语句对表达式的值进行判断,当表达式为非0值时,执行while语句中的内嵌语句;当表达式的值为0值时,则不执行while语句中的内嵌语句。该语句的特点是:先判断表达式,后执行语句。while循环控制语句的操作流程如图3-11所示。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/74_01.jpg?sign=1739271548-X9uF1oEAMSsZZhYYVtQRYYNKkek1TkAt-0-77faad7fdd6b2dc9c661a034768bc438)
图3-11 while循环控制语句的操作流程
其语法如下:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/74_02.jpg?sign=1739271548-cKurdoVVytH7poBWLS6Leq1GLscsm6WA-0-3b5d98df05aa0c9a76d63df7724f70d0)
只要while表达式expr的值为true,就重复执行嵌套中的statement语句,如果while表达式的值一开始就是false,则循环语句一次也不执行。
【例3-4】将10以内的偶数输出,若不是则不输出。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/74_03.jpg?sign=1739271548-rfPQYiTp6Hb0ggTUeAzirCaiYqh3PbdR-0-ca8c236c9f8a59b975f0319b89a11799)
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/75_01.jpg?sign=1739271548-okImCukenmJdGYjWfsey2DVBVg2CDCHB-0-c26580e0d40f89e9dc1853d384907103)
运行结果如下:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/75_02.jpg?sign=1739271548-wSe0SvidhJj1JpKfACOOKNgu5S1OzMuP-0-e80cd4a94596d739f6752307966fd1c9)
3.3.2 do…while循环语句
do…while语句也是循环控制语句中的一种,使用方式和while相似,也是通过判断表达式的值来输出循环语句。其语法如下:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/75_03.jpg?sign=1739271548-c9IJf9emrfR9bebnstvQ9o4bwGf63Nll-0-232736b8b682a4f65c69a8b94a0360d2)
该语句的操作流程是:先执行一次指定的循环体语句,然后判断表达式的值,当表达式的值为非0时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。其特点是先执行循环体,然后判断循环条件是否成立。do…while循环语句的操作流程如图3-12所示。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/75_04.jpg?sign=1739271548-6k2YMJoebAgAYDuM2YmfzzW08jAVtLrN-0-f58ae9a15e8d22ac3e5c3aad43bf1950)
图3-12 do…while循环语句的操作流程
a)操作流程图 b)N-S流程图
【例3-5】通过do…while语句计算一个员工总的工龄工资增加情况。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/75_05.jpg?sign=1739271548-WQ8ed6e5bWd9CNfd9Zk3DUn5Y9OSfcND-0-3504fcd3b546e279d3cae8a2e6f2a988)
运行结果如下:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/75_06.jpg?sign=1739271548-atySzHnQRHpHGdNN5vTHlq36EaxOWxha-0-b3ae48aa62f1e603e1b885d96cf52245)
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/76_01.jpg?sign=1739271548-5h6YPcXKX2cHk7x4lpFsIQQnzNV7DGic-0-baf8cc4140f16f24c2a64effe1482451)
前面我们已经说过,如果使用do…while语句计算员工的工龄工资,当变量a的值等于6时,会得到一个意想不到的结果。下面就来具体的操作一下,看具体会得到一个什么样的结果。定义变量a的值为6,重新执行示例,其代码如下。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/76_02.jpg?sign=1739271548-S9mzW5agdU1q5rczlHPmuykaoIR7oqQp-0-881eee559ef07cf2c6065e79fd470403)
运行结果为:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/76_03.jpg?sign=1739271548-PnqyVRBJCc845PTQssTiaD4RzIFAIs6w-0-bbcfbf87d122cfd92e78c772bcffe0cf)
注:这就是while和do…while语句之间的区别。do…while语句是先执行后判断,无论表达式的值是否为TRUE,都将执行一次循环;而while语句则是首先判断表达式的值是否为TRUE,如果为TRUE则执行循环语句,否则将不执行循环语句。
do…while循环语句后边必须加上分号作为该语句的结束。
编写这个示例意在说明while语句与do…while语句在执行判断上的一个小小区别,在实际的程序开发中不会出现上述的这种情况。
3.3.3 for循环语句
for语句是PHP中最复杂的循环控制语句,拥有3个条件表达式。其语法如下:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/76_04.jpg?sign=1739271548-c8iiI8CXSoxrkuJfaewoh5xXf8BzsOY5-0-57c17b643b766730b340c0873011d6d0)
for循环语句的参数说明如表3-2所示。
表3-2 for循环语句的参数介绍
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/76_05.jpg?sign=1739271548-tyxBeNFd9gHINkw77nY8aXTOo1Wsahcj-0-2b0ee950c1441db8a5d74e8e7e18b8f1)
其执行的过程:首先执行表达式1;然后执行表达式2,并对表达式2的值进行判断,如果值为true,则执行for循环语句中指定的内嵌语句,如果值为false,则结束循环,跳出for循环语句;最后执行表达式3(切忌是在表达式2的值为真时),返回表达式2继续循环执行。for循环语句的操作流程如图3-13所示。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/77_01.jpg?sign=1739271548-ZmuC7eOAxGb1vnS1Ac7X5veKqzFP6sO5-0-c5b4a71aa2794ee6ba55045483b05317)
图3-13 for循环语句的流程图
【例3-6】使用for循环来计算2~100所有偶数之和。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/77_02.jpg?sign=1739271548-yhuFLAG31DyRAG0hfas8JnLql6FKGsyC-0-5dd351f685b0dc9c03e2ff639df99b9a)
运行结果为:结果为:2550。
注:在编程时,有时会遇到使用for循环的特殊语法格式来实现无限循环。语法格式为:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/77_03.jpg?sign=1739271548-zezHrEnMMhO2qHIDqDPLqlKYL6btsr4w-0-331b8aa40e3daad81a416e8393dcea35)
对于这种无限循环可以通过break语句跳出循环。例如:
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/77_04.jpg?sign=1739271548-BoZScj3vFa2q1CQ5l7P6pf2X7dwfkoLW-0-c9f83d77a0231d35f7eb1e554fd94f5e)
3.3.4 foreach循环语句
foreach循环控制语句自PHP4开始被引入,主要用于处理数组,是遍历数组的一种简单方法。如果将该语句用于处理其他的数据类型或者初始化的变量,将会产生错误。该语句的语法有两种格式。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/77_05.jpg?sign=1739271548-KimrwXQwjesBSwIssmpn2FT764K485qy-0-c0b2210239723433e0d371b4f4088f49)
参数array_expression是指定要遍历的数组,其中的$value是数组的值,$key是数组的键名;statement是满足条件时要循环执行的语句。
在第一种格式中,当遍历指定的array_expression数组时,每次循环时,将当前数组单元的值赋给变量$value,并且将数组中的指针移动到下一个单元。
在第二种格式中的应用是相同的,只是在将当前单元的值赋给变量$value的同时,将当前单元的键名也赋给了变量$key。
说明:
当使用foreach语句用于其他数据类型或者未初始化的变量时会产生错误。为了避免这个问题,最好使用is_array()函数先来判断变量是否为数组类型。如果是,再进行其他操作。
【例3-7】 foreach输出数组元素值的应用。
![](https://epubservercos.yuewen.com/A81163/18123624508030506/epubprivate/OEBPS/Images/78_01.jpg?sign=1739271548-WbJinaNXAJGzAZJCBkSsWbUwfp9OLkrZ-0-23cd976b627c95bcdd6be3dfde6c83f4)
输出结果为: