PHP вложенность для цикла внутри для цикла

Я пытался выяснить это за последние 3 часа, и поэтому очень трудно найти какие-либо результаты поиска для «вложенности для цикла внутри для цикла», поэтому я должен задать этот вопрос, и кто-то может помочь прояснить, насколько это любительский вопрос Буду очень признателен за любую помощь.

Итак, у меня есть этот блок кода, для упражнения для начинающих, которое я нашел в 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 петля, это правда, так что будет эхо *, С этой точки зрения $b не является < $a как цикл еще не закончился, поэтому ++ еще не были добавлены и if утверждение ложно, поэтому мы <br /> и повторите цикл.

Второй раз вокруг. Сейчас $a=2 а также for цикл по-прежнему верно, поэтому он будет продолжаться $b для петли и эха *, Это где я запутался. $b имеет ++ в конце своего утверждения, так что это не значит, что после цикла 1 $b = 2 а также if все еще ложь?

В моей голове я продолжаю думать, что это должно распечатать как:

<br />* <br /> * <br />

вместо этого:

<br />* <br /> * * <br />

Мой вывод.

  1. $b значение будет сбрасываться до 1 после каждого цикла и повторяется до if утверждение неверно

ИЛИ ЖЕ

  1. * напечатанные сохраняются и будут автоматически отправной точкой в ​​начале каждого цикла. Я понимаю, что если делать простую печать для for($i=0;$i<11;$i++) Цикл будет нести значение, однако в моей ситуации печатный * не является значением, поэтому его не следует переносить в новый цикл.

ИЛИ ЖЕ

  1. Я просто совершенно не согласен с обоими моими выводами.

В любом случае, меня так сильно смущало.

Извините за длинное объяснение.

Благодарю.

2

Решение

Давайте делать вещи по одному шагу за раз

Внешняя петля

   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 раза — три звезды и так далее.

Теперь после печати звезды посмотрите, является ли это последняя звезда, которую должна была напечатать эта итерация, если это не так, то напечатайте пробел, чтобы в следующий раз, когда звезда печаталась, между ними был пробел.

Вот и все 🙂 Обратите внимание, что ваш внешний цикл начинается с 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

скрипка

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]