PHP嵌套for循环内部for循环

时间:2014-11-30 10:11:32

标签: php for-loop nested-loops

在过去的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 />

我的结论。

  1. 每个循环后<br />* <br /> * * <br />值将重置为1并重复自身,直到$b语句为假。
  2. OR

    1. 存储的if将被存储,并将成为每个循环开始时的自动起点。我理解,如果为*循环执行简单的打印将带有值,但在我的情况下,打印的for($i=0;$i<11;$i++)不是值,因此不应将其转移到新的循环。
    2. OR

      1. 我完全不同意我的结论。
      2. 无论哪种方式,它都让我很困惑。

        很抱歉很长的解释。

        感谢。

1 个答案:

答案 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