PHP的for循环嵌套问题,高手请进(需要讲一些细节)
echo $j,' ';
for($j=1;$j<=$i;$j++){
}
为什么输出结果是?
Notice: Undefined variable: j in C:\wamp\www\zhlx3.php on line 3
2
3
4
5
6
7
8
9
for($i=1;$i<=9;$i++){
for($j=1;$j<=$i;$j++){
}
echo $j,' ';
echo'<br/>';
}
为什么输出结果是?
2
3
4
5
6
7
8
9
10
for($i=1;$i<=9;$i++){
//echo $i,'......';
for($j=1;$j<=$i;$j++){
echo $j,' ';
}
为什么输出结果又是这样?
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4 5 6 7
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8 9
我是新手,被绕糊涂了,请高手耐心解答,顺便讲解一下for循环嵌套的执行顺序和原理。谢谢。
有个细节写错了,应该是echo $j,' ';,不好意思,各位。 展开
for循环的执行原理:
for循环的参数有(初始值;判断条件;更新循环变量表达式) 三者均不是必须的,若三者不完整则必须在适当的时候手动调用break命令终止循环,否则循环将一直持续下去成为死循环
执行过程为:
首先判断初始值是否满足判断条件,如满足则开始循环,若不满足则直接跳过循环因此如下的循环是不会被执行的:
for($i=0; $i<0; $i++)
然后执行一次循环体(包裹在for后面大括号里的代码)
使用更新循环变量表达式更新变量
使用判断条件进行判断,若不满足则终止循环,若满足则再次执行循环体
因此如下循环会被执行5次
for($i=0; $i<5; $i++)
for循环嵌套:
for循环嵌套的话将优先执行内循环,再执行外循环,如下:
//外循环开始
for($i=0; $i<10; $i++)
{
//这里是外循环的循环体
for($j=0; $j<20; $j++)//内循环开始
{
//这里是内循环的循环体
}//内循环结束
}//外循环结束
当开始执行循环时,首先执行外循环的循环体(其中包括了内循环),此时$i=0;在此过程中当执行到内循环处时开始执行内循环,$j由0递增到19;执行完20遍内循环后外循环结束,$i++;此时$i=1,再次开始执行外循环。
综上,外循环体共执行10次,内循环体执行20(内循环本身的重复次数)*10(每次外循环均执行20次内循环)=200次
多重嵌套按此方法逐层分析
代码分析:
for($i=1;$i<=9;$i++){
echo $j,' ';
for($j=1;$j<=$i;$j++){
}
}
按上述方法进行分析的话,执行步骤如下:
$i=1代入外循环,循环开始
执行echo $j,此时未定义$j,输出 Notice: Undefined variable: j in C:\wamp\www\zhlx3.php on line 3
执行至内循环处,内循环开始,$j=1代入循环
内循环体什么都没做,循环执行1次(最终$j=2;$i=1<$j;内循环终止)
$i++;$i此时等于2;再次开始外循环
echo $j;此时$j的变量还等于2;因此输出2
执行至内循环处,内循环开始,$j重新被初始化为1代入循环
内循环体什么都没做,循环执行2次(最终$j=3;$i=2<$j;内循环终止)
$i++;$i此时等于3;再次开始外循环
echo $j;此时$j的变量还等于3;因此输出3
执行至内循环处,内循环开始,$j重新被初始化为1代入循环
内循环体什么都没做,循环执行3次(最终$j=4;$i=3<$j;内循环终止)
$i++;$i此时等于4;再次开始外循环
。。。。。以此类推
第二段代码和第三段代码与第一段的不同之处仅在于内外循环的输出语句不同,按照此方法分析即可得到输出结果
循环算法是基础算法之一,原理简单但是分析比较麻烦,尤其涉及到嵌套。在刚开始学的时候经常搞不懂这是很正常的。解决的方法就是静下心来,把自己当做是一台速度极慢的计算机,按照for循环的执行过程逐条语句浏览,很快就可以弄明白的,祝你成功!
2014-11-27
你这问题也确实很饶人!
反正嘛, php中的循环(无论是什么循环), 都是内循环优先的!
比如:
for( $i = 1; $i <= 10; $i++) {
for( $j = 1; $j <= $1; $j++) {
}
}
当$i等于1的时候, 里面的内循环会循环一次, 然后接着外面的循环继续循环到2, 这个时候,内循环会 循环2次, 完成了之后, 外循环继续循环到3, 接着内循环会循环3次, 外循环才会循环第四次。。。。。。
就是说, 循环如果是嵌套的话, 那么,内循环必须循环完成后,外循环才会循环下一次,当然, 比如内循环10次的话, 那么外循环每循环一次, 内循环就会循环10次, 然后外循环才会继续下一次!
好像我这说的也有点绕啊。。。。
我想知道‘echo$j’3种输出结果各自的执行过程,最好详细一点。
您能告诉我3种输出结果它们之间的执行过程吗?我想要详细点