在过去的3个小时里一直试图找出这个,所以很难找到“嵌套for循环for loop”的任何搜索结果,所以我必须提出这个问题并且有人可以帮助澄清,就像一个业余爱好者一样这个问题,将非常感谢任何和所有的帮助。
所以我在下面有这个代码块,我在http://www.w3resource.com/php-exercises/php-for-loop-exercises.php找到了一个初学者循环练习 在该页面的问题3上。最终结果也应该在该页面上。
<?php
for($a = 1; $a <= 5; $a++) {
for($b = 1; $b <= $a; $b++) {
echo "*";
if($b < $a) {
echo " ";
}
}
echo "<br />";
}
?>
它看起来像一个由15个小*
我正在试图弄清楚它是如何工作的,因为即使网站有答案,我也想明白,所以我可以自己写东西而不是复制粘贴。
以下是我在阅读php.net
并尝试在Google上寻找解决方案后能够看到的内容。
因此,$a
for
循环开始为真,因此循环继续到$b FOR
循环,这是真的所以它将回显*
,此时{ {1}}不是$b
,因为循环尚未结束,因此< $a
尚未添加且++
语句为false,因此我们if
并重新运行环。
第二次。现在<br />
和$a=2
循环仍然为真,因此它将继续for
for循环和echo $b
。这是我感到困惑的地方。 *
在其语句末尾有$b
,所以这不是说在循环1之后++
和$b = 2
仍然是假的吗?
在我的脑海中,我一直认为应该打印出来:
if
而不是:
<br />* <br /> * <br />
我的结论。
<br />* <br /> * * <br />
值将重置为1并重复自身,直到$b
语句为假。OR
if
将被存储,并将成为每个循环开始时的自动起点。我理解,如果为*
循环执行简单的打印将带有值,但在我的情况下,打印的for($i=0;$i<11;$i++)
不是值,因此不应将其转移到新的循环。OR
无论哪种方式,它都让我很困惑。
很抱歉很长的解释。
感谢。
答案 0 :(得分:3)
让我们一步一步采取行动
外圈
for($a = 0; $a <= 5; $a++) {
//inner loop here
echo "<br>"; //after the inner loop has executed, start a new line
}
从0开始,一直到5,然后做任何写在里面的事情。现在这意味着每次迭代都会发生两件事
1)将对外循环的每次迭代执行内循环
2)将为外循环的每次迭代打印HTML行中断
现在内环做了什么?
for($b = 1; $b <= $a; $b++) {
echo "*";
if($b < $a) {
echo " "; // $b<$a means we still have more stars to print on this line
}
}
从1开始,上升到$a
的值,这个$ a将来自外部循环,第一次运行时为1,第二次运行时为2,最多为5。然后执行此操作,打印一个*
;这意味着第一次将打印1颗星,因为循环将从1开始并以1结束。第二次是2星,第3次是3星等等。
现在打印星星后,看看这是否是此迭代必须打印的最后一颗星,如果不是那么打印一个空格,以便下次打印星形时,它们之间会有一个空格。
就是这样:)注意你的外循环从1开始,它应该从0开始以正确形成所需的形状。
现在,如果你仍然对$b<$a
事情感到困惑,只需摆脱它并再次运行你的代码,你会发现没有什么变化,除了星星之间没有空格,它将是一个更容易理解
for($b = 1; $b <= $a; $b++) {
echo "*";
}
哦,++
在变量之后意味着将其值增加1.在for循环中,这意味着在下次运行时将1添加到计数器的值。你也可以把它写成
for($a=0; $a<=5; $a=$a+1) // thats the same as $a++;
如果您希望该值增加1以上,您可以说
for($a=0; $a<=5; $a=$a+2) // a will be 0 , 2, 4
<强> Fiddle 强>