在编写代码时,经常需要反复运行同一代码块。可以使用循环来执行这样的任务,而不是在脚本中添加若干几乎相等的代码行。在 PHP 中,有以下循环语句:
①while:只要指定条件为真,则循环代码块。
②do…while:先执行一次代码块,然后只要指定条件为真则重复循环。
③for:循环代码块指定次数。
④foreach:遍历数组中的每个元素并循环代码块。
3.2.1 while循环语句
while 循环只要指定的条件为真,while 循环就会执行代码块。语法格式为:
while (expr){
statement;}
该语法表示,只要expr表达式为true,那么就一直执行statement直到expr为false为止,statement表示要执行的动作或逻辑。
例3.5 循环打印输出数字1到5
<?php
$x=1;
while($x<=5) {
echo "数字是:$x <br>";
$x++;
}
?>
程序运行结果为:
数字是:1
数字是:2
数字是:3
数字是:4
数字是:5
3.2.2 do…while循环语句
do…while循环和while循环非常相似,其区别只是在于do…while保证必须执行一次,而while在表达式不成立时则可能不作任何操作。语法格式为:
do {
statement;
}while (expr)
该语法表示,先作do执行statement内容,然后在while中判断,只要expr表达式为true,那么再执行statement直到expr为false为止,不再执行statement。
例3.6 本实例首先把变量$x 设置为 1($x=1)。然后,do…while 循环输出一段字符串,然后对变量$x 递增 1。随后对条件进行检查($x 是否小于或等于 5)。只要$x 小于或等于 5,循环将会继续运行。代码如下:
<?php
$x=1;
do {
echo "数字是:$x <br>";
$x++;
} while ($x<=5);
?>
程序运行结果为:
数字是:1
数字是:2
数字是:3
数字是:4
数字是:5
do…while 循环只在执行循环内的语句之后才对条件进行测试。这意味着 do…while 循环至少会执行一次语句,即使条件测试在第一次就失败了。
例3.7 本实例把$x 设置为 6,然后运行循环,随后对条件进行检查:
<?php
$x=6;
do {
echo "数字是:$x <br>";
$x++;
} while ($x<=5);
?>
程序运行结果为:
数字是:6
3.2.3 for循环语句
for循环是PHP中更为复杂的循环,循环执行代码块指定的次数,如果已经提前确定脚本运行的次数,可以使用 for 循环。其语法如下:
for (init expr1; test expr2 ; increment expr3) {
code to be executed;
}
参数说明:
expr1:初始化循环计数器的值。
expr2:评估每个循环迭代。如果值为true,继续循环,如果值为 false,循环结束。
expr3:增加循环计数器的值。
第一个表达式(expr1)在循环开始前无条件求值一次,expr2 在每次循环开始前求值,如果值为 true,则继续循环,执行嵌套的循环语句;如果值为false,则终止循环,expr3 在每次循环之后被求值(执行)。
例3.8 本实例显示了从 0 到 5 的数字,代码如下:
<?php
for ($x=0;$x<=5;$x++) {
echo "数字是:$x <br>";
}
?>
程序运行结果为:
数字是:0
数字是:1
数字是:2
数字是:3
数字是:4
数字是:5
例3.9 for语句每个表达式都可以为空。如果expr2 为空则将无限循环下去,但可以通过break来结束循环,代码如下:
<?php
for ($i = 1;;$i++) {
if ($i > 10) {
break;
}
echo $i;
}
?>
在使用循环语句时,要注意不要无限循环而造成程序“僵死”,另外还要注意循环条件(循环判断表达式),以确保循环结果正确。
3.2.4 foreach循环
foreach 循环只适用于数组,并用于遍历数组中的每个键/值对。PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组的简便方法。foreach 仅能用于数组,当试图将其用于其他数据类型或者一个未初始化的变量时会产生错误。其语法如下:
foreach ($array as $value) {
code to be executed;
}
每进行一次循环迭代,当前数组元素的值就会被赋值给$value 变量,并且数组指针会逐一地移动,直到到达最后一个数组元素。
例3.10 本实例演示的循环将输出给定数组($colors)的值,代码如下:
<?php
$colors = array("red","green","blue","yellow");
foreach ($colors as $value) {
echo "$value <br>";
}
?>
程序运行结果为:
red
green
blue
yellow
3.2.5 流程控制的另一种书写格式
所谓的另一种书写格式就是PHP流程控制的替代语法。if,while,for,foreach,switch这些流程控制语句都有替代语法。
基本形式:左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;, endfor;,endforeach;以及 endswitch;。
例3.11 本实例使用流程控制实现替代语法:列举1 000内的所有素数,代码如下:
<?php
$aa = 2;
$max = 1000;
$arr = array();
echo "1000内的素数为:";
while($aa <$max)://while循环开始
$boo = false;
foreach($arr as $value): //foreach开始
if($aa %$value==0): //if开始
$boo = true;
break;
endif; //if结束
endforeach; //foreach循环结束
if($boo):
echo $aa."";
$arr[count($arr)]=$aa;
enfif;
$aa++;
endwhile; //while循环结束
?>
程序运行结果为:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
这些语法能发挥的地方是在PHP和HTML混合页面的代码里面。好处如下:
①使HTML和PHP混合页面代码更加干净整齐。
②流程控制逻辑更清晰,代码更容易阅读。
3.2.6 使用break/continue语句跳出循环
PHP中常用的for与foreach循环中,经常遇到条件判断或中止循环的情况。而处理方式主要用到break及continue两个流程控制指令。
break 用来跳出当前执行的循环,并不再继续执行循环,代码如下:
<?php
$i = 0;
while ($i < 7) {
if ($arr[$i] =="stop") {
break; //当循环到$arr中的值等于"stop"时,执行break语句,后面的
$i++将不再执行
}
$i++;
}
?>
continue 立即停止目前执行循环,并回到循环的条件判断处,继续下一个循环,代码如下:
<?php
while (list($key,$value) = each($arr)) {
if ($key =="siwei"){
continue; //如果查询到对象的值等于siwei,这条记录就不会执行出来了。
}
do_something ($value); //单此语句任将执行下次的循环。
}
?>
例3.12 使用continue和break打印符合条件的数值,代码如下:
<?php
$i = 1;
while (true) {//这里看上去这个循环会一直执行
if ($i==2) {// 2跳过不显示
$i++;
continue;
} else if ($i==5) {//但到这里$i=5就跳出循环了
break;
} else {
echo $i . '<br>';
}
$i++;}
exit;
echo '这里不输出';
?>
程序运行结果为:
1
3
4
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。