Циклы в PHP. Циклы Вложенный цикл for

Эту статью я пишу для новичков, которые только начинают изучать PHP . Расскажу я в этой статье о всевозможных циклах в PHP , так как данной статьи у меня на сайте не было. Были только , но, несмотря на общую схожесть, это всё-таки не то. В PHP есть 4 вида циклов .

  1. WHILE
  2. DO-WHILE
  3. FOREACH

Разберём их по порядку и начнём с самого популярного цикла в PHP (да и не только в PHP ) - это цикл FOR . Синтаксис у данного цикла следующий:

For(Выражение_1; Выражение_2; Выражение_3) {
операторы
}

Выражение_1 выполняется сразу же и безоговорочно, Выражение_3 выполняется после каждой итерации цикла. Выражение_2 - это проверка того, нужно ли продолжать цикл. Если результат выражения будет true , то начинается следующая итерация цикла, а если false , то цикл прекращает свою работу.

Следующий тип цикла - это WHILE . Это более простой тип циклов, синтаксис которого следующий:

While(Выражение) {
операторы
}

Пока Выражение возвращает true , цикл будет работать, а как только появится false , он прекращает свою работу.

Цикл DO-WHILE очень похож на WHILE , но с одним отличием. Условие выхода проверяется после выполнения итерации, а не до. Таким образом, данный цикл будет выполняться всегда хотя бы 1 раз. И вот синтаксис цикла DO-WHILE :

Do{
операторы
}while(Условие);

И, наконец, последний тип циклов - это foreach , который служит только для перебора массивов и объектов . Он необходим, когда ключами у массива являются не числа (которые легко перебрать через тот же FOR ), а строки. Синтаксис цикла FOREACH следующий:

Foreach($array_or_object as $key => $value) {
операторы
}

И, наконец, давайте применим все 4 типа циклов в PHP для перебора массивов :

$list = array(5, 2, 3, 10, 12, 10);
$array = array("a" => 1, "x" => 10, "m" => -5);
for ($i = 0; $i < count($list); $i++) {
echo $list[$i]."; ";
}
echo "
";
$i = 0;
while ($i < count($list)) {
echo $list[$i]."; ";
$i++;
}
echo "
";
$i = 0;
do {
echo $list[$i]."; ";
$i++;
}while($i < count($list));
echo "
";
foreach ($array as $key => $value) {
echo "$key = $value; ";
}
?>

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

Синтаксис цикла for выглядит следующим образом:

Данный цикл состоит из ключевого слова for , за которым следуют круглые скобки, содержащие внутри три выражения, разделенных точками с запятой. Он имеет следующий порядок выполнения:

  1. В начале цикла выполняется инициализирующее выражение, оно всегда вычисляется (выполняется) только один раз в самом начале.
  2. Далее следует условное выражение. Перед началом каждой итерации вычисляется значение условного выражения (условие выполнения), если оно принимает значение TRUE, то тело цикла выполняется, если оно принимает значение FALSE , выполнение цикла завершается. Если при первой проверке условие оказывается ложным, тело цикла не выполнится ни разу.
  3. В самом конце, после выполнения действий в теле цикла обрабатывается последнее выражение (следующее выражение после условия). В данном случае это инкрементирующее выражение - оно увеличивает с помощью инкремента значение переменной-счетчика.

Простой пример цикла for:

На самом деле цикл for является почти универсальным, поскольку он допускает самые разные варианты своего применения.

Цикл for без частей заголовка

Каждое из выражений в заголовке цикла for может отсутствовать.

Если инициализация не нужна или происходит в другом месте, инициализирующее выражение не нужно. Перепишем немного предыдущий пример:

Обратите внимание, символ точки с запятой обязателен, так как означает отсутствующее выражение. Отсутствие выражения условия эквивалентно расположению в условии значения TRUE .

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

Не стоит забывать о том, что любое из трех выражений или все сразу можно опустить, но разделительные точки с запятой (;) следует ставить всегда.

Несколько выражений в заголовке цикла for

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

"; } ?>

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

Вложенные циклы

Так же как и условные операторы, циклы могут быть вложенными. Простой пример с одним уровнем вложенности:

"; for ($j = 0; $j < 2; $j++) { echo "Вложенный цикл.
"; } } ?>

Вряд ли вы сможете написать серьезный сценарий на PHP , не используя циклы. Что такое цикл? Это особый вид управляющей конструкции, позволяющие многократно (и даже бесконечно) выполнять один и тот же код. В PHP поддерживаются следующие циклы:

Первые три цикла вы, скорее всего, сможете встретить в большинстве языков программирования. Циклы, в зависимости от условий, можно прерывать или продолжать (переходить к следующей итерации, не выполняя тело цикла). Давайте рассмотрим подробнее каждый из циклов.

Цикл for

Синтаксис цикла for следующий.

For(инициализация; условие; команды_после_итерации) { тело_цикла; }

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

// Массив значений $array = array("Яблоко", "Картошка", "Арбуз", "Цветок", "Вода", "Ртуть", "Кислород", "Пшеница", "Россия", "Москва", "Ливень"); // Условие цикла звучит так: пока счетчик не достигнет значения, равного количеству // элементов массива, тело цикла выполняется for($i = 0; $i < count($array); $i++) { print "
".($i + 1).". ".$array[$i]."."; } /* Результат работы цикла будет таким: 1. Яблоко. 2. Картошка. 3. Арбуз. 4. Цветок. 5. Вода. 6. Ртуть. 7. Кислород. 8. Пшеница. 9. Россия. 10. Москва. 11. Ливень. */

Так как счетчик $i начинался с нуля, при каждой итерации мы к его значению прибавляли единицу, чтобы список выглядел более привычным. После каждой итерцации значение счетчика увеличивалось на единицу, и когда оно достигло 11, цикл остановился. Теперь давайте взглянем на цикл do-while.

Цикл do-while

Цикл do-while отличается тем, что он работает по постусловию. Это означает, что код, заключенный в теле цикла, выполнится как минимум один раз. Синтаксис цикла такой:

Do { тело_цикла; } while(условие);

Этот цикл используется довольно редко при веб-программировании , но может он вам и понадобится в ваших сценариях.

// Уже знакомый нам массив $array = array("Яблоко", "Картошка", "Арбуз", "Цветок", "Вода", "Ртуть", "Кислород", "Пшеница", "Россия", "Москва", "Ливень"); // Запускаем цикл $i = 1; do { print "
".$i.". ".$array[($i - 1)]."."; } while($i++ < count($array)); /* Результат работы цикла будет таким: 1. Яблоко. 2. Картошка. 3. Арбуз. 4. Цветок. 5. Вода. 6. Ртуть. 7. Кислород. 8. Пшеница. 9. Россия. 10. Москва. 11. Ливень. */

Обратите внимание на отличие того, что мы выводим на экран в этом цикле от цикла for . Так как код в теле цикла do-while исполняется как минимум один раз, начальное значение счетчика было задано нулевым. Как работает цикл… выполняется код, затем проверяется условие. При первой итерации счетчик имел значение 1. После итерации единица оказалась меньше 11 (количества элементов). При последней итерации счетчик имел значение 11, а это никак не меньше 11. Цикл остановился. На do-while очень похож цикл while.

Цикл while

Цикл while является предусловным. Он выполнится только тогда, когда его условие истинно. То есть цикл while может и не выполниться вовсе. Его ситаксис таков:

While(условие) { тело_цикла; }

Наряду с циклом for цикл while используется очень часто.

$array = array("Яблоко", "Картошка", "Арбуз", "Цветок", "Вода", "Ртуть", "Кислород", "Пшеница", "Россия", "Москва", "Ливень"); $i = 1; while($i++ <= count($array)) { print "
".$i.". ".$array[($i - 1)]."."; } /* Результат работы цикла будет таким: 1. Яблоко. 2. Картошка. 3. Арбуз. 4. Цветок. 5. Вода. 6. Ртуть. 7. Кислород. 8. Пшеница. 9. Россия. 10. Москва. 11. Ливень. */

Цикл while для начинающих разработчиков наиболее прост и понятен.

Цикл foreach

Цикл foreach не похож на все перечисленные. Он появился в PHP4, предназначен для перебора массивов. Разработчику не нужно ничего выдумывать для этого. Всё легко и просто:

/** * Цикл foreach следует понимать как «для каждого из». * Массив, обрабатываемый циклом, передается переменной, которая * доступна только внутри тела цикла. При желании можно обращаться * и к ключам массива. */ foreach(массив as элемент_массива) { тело_цикла; } foreach(массив as ключ_массива => элемент_массива) { тело_цикла; }

Принцип работы цикла foreach совсем не такой как у циклов for , while и do-while . Поэтому для неопытных разработчиков довольно непросто понять что именно с его помощью можно (и даже нужно) делать.

// Изменим уже знакомый нам массив. Сделаем его ассоциативным. $array = array("Яблоко" => "фрукт", "Картошка" => "овощь", "Арбуз" => "ягода", "Цветок" => "растение", "Вода" => "жидкость", "Ртуть" => "металл", "Кислород" => "газ", "Пшеница" => "хлеб", "Россия" => "наша Родина", "Москва" => "столица нашей Родины", "Ливень" => "попадос"); $i = 1; // Можем сделать так foreach($array as $v) { print "
".$i.". ".$v."."; $i++; } /* Получим такой вот неожиданный результат 1. фрукт. 2. овощь. 3. ягода. 4. растение. 5. жидкость. 6. металл. 7. газ. 8. хлеб. 9. наша Родина. 10. столица нашей Родины. 11. попадос. */ // А теперь сделаем иначе foreach($array as $k => $v) { print "
".$i.". ".$k." — это ".$v."."; $i++; } /* Теперь результат будет таким 1. Яблоко — это фрукт. 2. Картошка — это овощь. 3. Арбуз — это ягода. 4. Цветок — это растение. 5. Вода — это жидкость. 6. Ртуть — это металл. 7. Кислород — это газ. 8. Пшеница — это хлеб. 9. Россия — это наша Родина. 10. Москва — это столица нашей Родины. 11. Ливень — это попадос. */

Понимаете как работает этот цикл? Если нет, можете задать вопрос в комментариях к материалу.

В любом цикле можно использовать конструкции break или continue . Иногда не имеет смысл продолжать работу цикла или нужно перейти к следующей итерации.

$array = array("Яблоко" => "фрукт", "Картошка" => "овощь", "Арбуз" => "ягода", "Цветок" => "растение", "Вода" => "жидкость", "Ртуть" => "металл", "Кислород" => "газ", "Пшеница" => "хлеб", "Россия" => "наша Родина", "Москва" => "столица нашей Родины", "Ливень" => "попадос"); $i = 1; // Пример работы цикла с конструкцией continue foreach($array as $k => $v) { if($k != "Кислород") continue; print "
".$i.". ".$k." — это ".$v."."; $i++; } /* Результат будет таким 1. Кислород — это газ. */ $i = 1; // Пример работы цикла с конструкцией break foreach($array as $k => $v) { if($k == "Кислород") break; print "
".$i.". ".$k." — это ".$v."."; $i++; } /* Результат будет таким 1. Яблоко — это фрукт. 2. Картошка — это овощь. 3. Арбуз — это ягода. 4. Цветок — это растение. 5. Вода — это жидкость. 6. Ртуть — это металл. */

Очень часто при написании скриптов требуется выполнить одно и тоже действие несколько раз. Для этого и нужны циклы. Циклы в php , как и в других языках, делятся на несколько типов:

  1. Цикл со счетчиком for
  2. Цикл с условием while, do-while
  3. Цикл для обхода массивов foreach

Например, при создании интернет магазина , нам нужно до вывода товаров на экран, убрать товары, остаток на складе которых ниже 10. Для этого мы в цикле обходим массив с товарами, и при помощи условного оператора if, сверяем кол-во товаров на складе, и убираем из массива все товары, у которых значение на складе меньше 10.

Цикл For в PHP

Цикл со счетчиком for - выполняется определенное количество раз. Рассмотрим пример:

"; } ?>

В этом примере цикл будет выполняться 11 раз. От 0 (т.к. переменная $i = 0) до 10 (т.к. $i <= 10). Каждую итерацию $i будет увеличено на 1 ($i++). Чтобы было понятней, сделаем еще один пример:

"; } ?>

Цикл будет выполняться от 5 и до 9 ($i < 10 (в предыдущем примере было <= 10)).

Так же цикл можно выполнять в обратном порядке:

5; $i--) { echo "Номер итерации: $i
"; } ?>

Цикл будет выполнен от 10 и до 5.

Так же цикл можно выполнять с определенным шагом, рассмотрим пример:

"; } ?>

В цикле будет выполнено 3 итерации (0, 5, 10) с шагом 5. Каждую итерацию, счетчик цикла будет увеличен на 5.

Цикл foreach в PHP

Цикл foreach - самый распространенный цикл. Требуется почти во всех скриптах, особенно если php скрипт работает с базами данных. Используется для обхода массивов.

Например, рассмотрим небольшой пример:

$value) { echo "Ключ: $key, Значение: $value
"; } ?>

Запустив скрипт вы увидете:

Ключ: 0, Значение: red Ключ: 1, Значение: blue Ключ: 2, Значение: green Ключ: color, Значение: yellow Ключ: test, Значение: дизайн студия ox2.ru

Цикл while в PHP

Цикл while используется для выполнения цикла до тех пор, пока выполняется условие. Если условие ни когда не будет выполнено, то цикл зациклиться.

Рассмотрим пример:

"; } ?>

На экране увидим числа от 1 до 19

Цикл do-while в PHP:

Цикл do-while - работает точно так же как и цикл while , единственное отличие что условие выполняется после итерации. Напишем пример:

"; } while ($i < 20); //Выполняем цикл до те пор, пока $i < 20 ?>

На экране увидим числа от 1 до 20. Обратите внимание, что в предыдущем примере с циклом while было от 1 до 19, т.к. условие выполнялось до итерации цикла.

Для того чтобы прервать цикл существует функция break , она позволяет выйти из цикла , не зависимо от того сколько итераций осталось до окончания цикла.

Для того чтобы пропустить итерацию, и перейти к следующей итерации - есть функция continue .

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

Очень часто при написании скриптов требуется выполнить одно и тоже действие несколько раз. Для этого и нужны циклы. Циклы в php, как и в других языках, делятся на несколько типов: Цикл со счетчиком for Цикл с условием while, do-while Цикл для обхода массивов foreach

OX2 2014-10-02 2014-10-02