for
是PHP中循环结构里最复杂的一个,格式如下:
for(表达式1 ; 表达式2 ; 表达式3){
// 循环体,也就是你的业务逻辑代码
}
表达式1
:用于初始化数据,仅循环结构最开始的时候执行一次,之后不会再执行。
表达式2
:用于条件判断,每次循环开始前执行,TRUE
则继续,FALSE
则退出循环。
表达式3
:一般用于数据递增,每次循环之后执行。
看一个简单的例子:
// 将输出 0123456789
for($i = 0 ; $i < 10; $i++){
echo $i;
}
for
循环结构在执行的时候会分几步去操作
- 执行
表达式1
,只在最开始的时候执行一次 - 执行
表达式2
,如果条件不满足,则退出循环,反之则继续 - 执行
循环体
- 执行
表达式3
- 随后依次执行234步骤
搞清楚三个表达式的意思和执行步骤后,再来这个例子:
$i = 0;
// 输出 0123456789
for( ; $i < 10; $i++){
echo $i;
}
在这个例子中没有 表达式1
,这代表 表达式1
可有可无,但是隔开 表达式2
的那个分号一定要有,否则结构体不正确就会报错了。
继续看例子:
$i = 0;
// 输出 0123456789
for( ; ; $i++){
if($i == 10) break;
echo $i;
}
在这个例子中,表达式2
也没有了,但程序还是正常执行,这是因为 PHP 在执行到这一步的时候,如果没有表达式,则默认为 TRUE
。
继续看例子:
$i = 0;
// 输出 0123456789
for( ; ; ){
if($i == 10) break;
echo $i;
$i++;
}
表达式3
同样也没有了。
这么多例子中,唯一保持不变的就是位于for( ; ; )
中间的分号,分号是保证for
循环结构的顶梁柱,缺一不可,只要有了分号,那么三个表达式都是可有可无的。
但不管省略掉多少表达式,始终要记得判断好循环条件,否则造成无限循环,程序就卡死了。
上面的例子一直在减少表达式,那么看下面的例子:
// 输出 00112233445566778899
for( $i = 0, $j = 0; ; ){
if($i == 10) break;
echo "$i$j";
$i++;
$j++;
}
表达式1
的地方存在了两个表达式,中间用逗号,
隔开,事实上还可以设置更多,看自己需求,这一点不仅仅只是 表达式1
,其他两个表达式也同样如此。
继续看例子:
/*
输出 下列数字
0 0
3 1
6 2
9 3
12 4
15 5
*/
for( $i = 0, $j = 0; $i < 10, $j < 6; ){
if($i == 10) break;
echo "$i \t $j <br />";
$i += 3;
$j++;
}
在这个 for
循环中,表达式2
的地方使用了两个逻辑表达式,它们的条件分别是 $i < 10
和 $j < 5
,但实际运行后,$i
都增加到 15
了,早就大于 10
了,再看后面一个条件,实际运行结果看起来到是符合这个条件。
其中原因是,PHP 不管 for
循环中 表达式2
的位置里有多少逻辑表达式,它只看最后一个表达式的判断结果。
至于 表达式3
就不进行演示了,因为三个表达式中只有 表达式2
看起来有特殊功能。
需要注意的是,在这些表达式中,同样可以使用函数、变量、对象属性、对象方法、以及部分PHP语句(如print
)。
for
循环也支持第二种方式:
for($i = 0; $i < 10;$i++):
echo $i;
endfor;