PHP的for循环嵌套问题,高手请进(需要讲一些细节)

for($i=1;$i<=9;$i++){echo$j,' ';for($j=1;$j<=$i;$j++){}为什么输出结果是?Notice:Undefinedv... for($i=1;$i<=9;$i++){
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,' ';,不好意思,各位。
展开
 我来答
A_I_R003
2014-11-28
知道答主
回答量:5
采纳率:0%
帮助的人:6.8万
展开全部

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++){
    }
}

按上述方法进行分析的话,执行步骤如下:

  1. $i=1代入外循环,循环开始

  2. 执行echo $j,此时未定义$j,输出 Notice: Undefined variable: j in C:\wamp\www\zhlx3.php on line 3

  3. 执行至内循环处,内循环开始,$j=1代入循环

  4. 内循环体什么都没做,循环执行1次(最终$j=2;$i=1<$j;内循环终止)

  5. $i++;$i此时等于2;再次开始外循环

  6. echo $j;此时$j的变量还等于2;因此输出2

  7. 执行至内循环处,内循环开始,$j重新被初始化为1代入循环

  8. 内循环体什么都没做,循环执行2次(最终$j=3;$i=2<$j;内循环终止)

  9. $i++;$i此时等于3;再次开始外循环

  10. echo $j;此时$j的变量还等于3;因此输出3

  11. 执行至内循环处,内循环开始,$j重新被初始化为1代入循环

  12. 内循环体什么都没做,循环执行3次(最终$j=4;$i=3<$j;内循环终止)

  13. $i++;$i此时等于4;再次开始外循环

  14. 。。。。。以此类推


第二段代码和第三段代码与第一段的不同之处仅在于内外循环的输出语句不同,按照此方法分析即可得到输出结果


循环算法是基础算法之一,原理简单但是分析比较麻烦,尤其涉及到嵌套。在刚开始学的时候经常搞不懂这是很正常的。解决的方法就是静下心来,把自己当做是一台速度极慢的计算机,按照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种输出结果各自的执行过程,最好详细一点。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
smileQQ哥
2014-11-29
知道答主
回答量:12
采纳率:0%
帮助的人:1.3万
展开全部
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莘赡05V
2014-11-27 · 知道合伙人软件行家
莘赡05V
知道合伙人软件行家
采纳数:1397 获赞数:3710
毕业安徽理工大学

向TA提问 私信TA
展开全部
因为第一次循环$i的时候,那个时候你echo$j,$j还没定义,$j是在其后面才循环的
追问
您能告诉我3种输出结果它们之间的执行过程吗?我想要详细点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式