Циклы в php с mysql do while. Циклы в PHP. Операторы continue и break

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

Идея цикла заключается в том, чтобы делать что-то снова и снова, пока задача не будет завершена или пока не выполнится определенное условие (заданное). Перед тем, как показать реальный пример где может понадобиться такая конструкция, давайте рассмотрим структуру PHP цикла.

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

Суть вайла проста. Он будет выполнять заданный набор команд снова и снова, пока выполняется прописанное условие. Так называемый цикл с предусловием, то есть сначала проверка, потом выполнение. Эта логическая проверка работает так же, как та, которую мы рассматривали в уроке про .
Простой пример while цикла представлен ниже:

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

Этот код показывает, как построен цикл. Примерный алгоритм выполнения выглядит следующим образом:

  • Шаг 1. Проверяется заданное условие цикла. Если оно истинно, то выполняется Шаг 2, если ложно, то Шаг 4.
  • Шаг 2. Выполнение тела цикла (заданных команд).
  • Шаг 3. Процесс начинается снова (Шаг 1).
  • Шаг 4. Если условное выражение ложно, то код внутри цикла не выполняется. Код, записанный после цикла выполняется как обычно.

Операторы цикла используются очень часто в любых языках программирования. Почти все задачи используют циклы, поэтому стоит обратить особое внимание на их изучение. В PHP существуют 4 вида циклов:

  • while (префиксная проверка условия);
  • do..while (постперфиксная проверка условия);
  • for ;
  • foreach ;

Первые три цикла похожи на стандартные циклы из языков программирования (С++, Pascal), а последний (foreach) на Perl. Рассмотрим в отдельности первые три операторов цикла, а последний будет рассмотрен в отдельном уроке. Отметим то, что каждый из циклов допускает вложенные циклы, то есть цикл внутри цикла.

Оператор цикла while в PHP

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

Синтаксис while в PHP:

//может быть сложное логическое условие { операторы; } ?>

В условие стоит некое выражение, которое должно быть либо истинным (true), либо ложным (false). В случае истинного значения условия выполняются операторы, которые стоят в фигурных скобках. После чего опять происходит проверка условия на истинность. Если условие ложное, то программа не входит в цикл. В случае одного оператора фигурные скобки можно опустить.

Примечание : условие может состоять из очень многих выражений с использованием алгебры логики &&, ||, ! и т.д.

Стоит обратить внимание на то, что если в условие есть операторы, то они должны как-то изменяться, иначе цикл просто зациклиться.

Приведу простой пример на использование while :

"; $i++; } ?>

Выше описанный пример выведет следующий результат:

i = 0
i = 1
i = 2
i = 3
i = 4

Обратите внимание, что $i=5 не будет выведено, т.к. i увеличивается в самом конце цикла и поэтому как только он достигнет 5, то условие входа в цикл просто не выполнится.

Оператор break в PHP

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

//условие всегда истинно { echo "i =".$i."
"; $i++; if($i>=5) break; } ?>

Результат будет такой же, как и в предыдущем примере.

Оператор continue в PHP

Оператор continue; прекращает текущую итерацию цикла, перемещаясь в начало, но не прекращает цикл полностью. Например:

//условие всегда истинно { echo "i =".$i."
"; $i++; if($i>=5) break; else continue; } ?>

Результат этого примера будет таким же, как и у предыдущих примеров.

Как показывает практика, операторы continue; и break; зачастую помогают реализовать сложные циклы.

Приведу ещё пример по использованию цикла while :

"; } //результаты этих двух while будут разными //из-за постпрефиксной и префиксной формы $i=0; while (++$i //префиксная форма { echo "i =".$i."
"; } ?>

Оператор цикла do...while в PHP

Оператор do...while очень похож на обычный while . Единственное их отличие во времени проверки условия. Цикл do...while будет выполнен хотя бы один раз, поскольку проверка происходит в самом конце. Синтаксис do...while :

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

"; $i++; } while($i

Его результат аналогичен первым рассмотренным примерам.

Стоит отметить, что операторы continue; и break; также могут применяться в таких циклах.

Оператор цикла for в PHP

Синтаксис оператора for следующий:

В start происходит начальная инициализация переменных. В usloviya должны стоять одно или несколько условий завершения цикла. В shag заносятся операторы, которые выполняются в конце каждой итерации. Например:

"; } ?>

Результат выполнения этого цикла будет таким же как и у предыдущих примеров.

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

", $i++); ?>

Замечание : в shag недопустимо использование функции echo .

Шаг цикла и условия могут быть самыми разнообразными. Например, можно написать не i++, а i+=5 (инкремент на 5).

Каждый из разделов цикла for может быть опущен, в таком случае получается бесконечный цикл:

for допускает использование continue; и break; .

На последок приведем пример двух эквивалентных конструкций цикла, но один будет for, а другой while

Эквивалентна следующей:

Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!

Здравствуйте дорогие читатели и постоянные подписчики! Пришло время продолжить цикл статей о PHP и сегодня мы изучим такую базовую и при этом очень важную вещь, как циклы. Что вам нужно знать о циклах в первую очередь? А то, что применяются они везде и всюду, и шаблоны Joomla, VirtueMart, Wordpress, OpenCart и любой другой CMS - не исключение.

Что такое цикл? Цикл — это многократное повторение одного и того же участка кода. Сколько нужно сделать повторений – зависит от счётчика цикла, который мы сами создаём и можем им управлять. Это очень удобно, например, когда нам нужно отрисовать товары в категории интернет-магазина, вывести посты в блоге, вывести комментарии к статье или товару, все меню в CMS (движках сайтов) сделаны тоже с помощью циклов. В общем, циклы используются очень часто.

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

Оператор ++ (инкремент) увеличивает значение переменной на единицу, в то время как оператор -- (декремент) уменьшает значение переменной на единицу. Их очень удобно использовать в циклах как счётчик, да и в программировании в целом. Различают также ПРЕ инкремент/декремент и ПОСТ инкремент/декремент:

PRE инкремент/декремент ++$a Увеличивает $a на единицу и возвращает значение $a. --$a Уменьшает $a на единицу и возвращает значение $a. POST инкремент/декремент $a++ Возвращает значение $a, а затем увеличивает $a на единицу. $a-- Возвращает значение $a, а затем уменьшает $a на единицу.

Например:

$a = 1; echo "Вывод числа: " . $a++; // Вывод числа: 1 echo " Вывод числа: " . $a; // Вывод числа: 2 echo "Вывод числа: $a"; $a += 1; // тоже самое, что и в первой строке $a = 1; echo "Вывод числа: " . ++$a; // Вывод числа: 2 echo "Вывод числа: " . $a; // Вывод числа: 2 $a += 1; echo "Вывод числа: $a"; // тоже самое, что и в первой строке этого блока

Цикл for

for (часть А; часть В; часть С){ // Любой код, сколько угодно строк; }

Цикл for состоит из 3 частей и самого тела. Часть А просто выполняет то, что в ней написано, как правило, в 90% случаев там создаётся счётчик цикла. Часть В – это, грубо говоря, уже знакомый нам if , то есть проверка на истину (true?). Если условие верно, то есть true , тогда PHP заходит внутрь цикла и продолжает его исполнять. Часть С – тоже самое что часть А, как правило в Части С мы делаем какие-то преобразования с счётчиком. Например:

"; } echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Теперь об алгоритме работы цикла for. Первым делом, увидев for, PHP заходит в часть А и выполняет её один единственный раз (см. изображение ниже). Далее PHP переходит в часть В и проверяет, true там или false. Если true, то выполняет тело цикла и только после этого переходит в часть С. После этого PHP снова переходит в часть В и проверяет, там до сих пор true или уже нет. Если нет, то цикл заканчивается, если да, то продолжается до тех пор, пока в части В не будет false.

Результат работы предыдущего примера:

Цикл While

while (часть В){ // Любой код, сколько угодно строк; }

Как видите, здесь нету части А и части С, из цикла for здесь осталось только условие, то есть часть В. Если нам нужно использовать счётчик, то мы должны поместить его внутрь цикла while, среди остального кода, это будет част С. А создавать счётчик нужно до начала конструкции while:

Часть А; while (часть В){ // Любой код, сколько угодно строк; Часть С; }

Переделаем предыдущий цикл for в цикл while:

"; $i++; } echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Результат будет точно таким же. Что использовать: цикл for или цикл while – дело вкуса, смотрите как вам удобней и логичней, разницы нет.

Цикл do... while

Менее распространённый из всех видов циклов. По сути это перевёрнутый while. Его фишка в том, что PHP хотя бы один раз (первый), но обязательно зайдёт в тело цикла do... while, потому что в этом цикле условие в конце:

Часть А; do{ // Любой код, сколько угодно строк; Часть С; }while(Часть В);

"; $i++; }while($i < 8); echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Важно понимать: во всех трёх видах циклов нет обязательных частей.

Пример цикла for без части А и части С:

For(;$i > 8;){ // ваш код }

Пример цикла for без всех трёх частей:

For(;;){ // классический бесконечный цикл }

То есть все точки с запятой всё равно остаются в цикле for, такой синтаксис!

Бесконечные циклы

Бесконечный цикл – это ошибка разработчика, при которой страница никогда не сможет загрузиться до конца, так как условие цикла (часть В) всегда будет true. Например:

"; $i++; }while($i != 0); echo "ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду..."; ?>

Результат:

Это я показал лишь часть, потому что в экран всё не помещается. Вот так ваш браузер и сервер вашего сайта будут мучатся бесконечно, пока браузер не откажет секунд через 30. А все потому, что в примере выше переменная $i никогда не будет равно нулю, она изначально равна 1 и постоянно возрастает.

То есть разработчик был невнимательным, когда придумал такое условие.

Управление циклами

Оператор break. Бывают ситуации, когда нам не нужно, чтобы цикл отыгрывал все итерации (повторения). Например, в какой-то определённый момент мы хотим его прервать и продолжить выполнение ниже по коду:

"; if ($i === 5) break; // выходим из цикла если $i равно 5 $i++; } echo "Я умею считать только до 5:("; ?>

Результат:

В примере выше как только мы дошли до пяти, PHP вышел из цикла, а так бы он досчитал до 7.

Оператор continue тоже прерывает выполнение цикла, но в отличии от break, continue не выходит из цикла, а возвращает интерпретатор PHP назад к условию (к части В). Пример:

"; } echo "Что-то пропустил?"; ?>

Результат:

Только что мы пропустили цифру 5, так как PHP не дошёл до echo.

Цикл может быть вложен в цикл. В таком случае операторы continue и break распространяются только на один цикл, тот, в котором они находятся. То есть другими словами перебрасывают на один уровень, а не через все. Пример:

Но мы и сами можем выбирать, через сколько уровней нужно перепрыгнуть:

"; $i++; $i=1; $k=1; while ($k < 8) { echo "Итерация $k номер ". $k . "
"; if ($k === 5) break 2; $k++; } } ?>

Результат:

Естественно при этом мы не можем ставить число больше, чем у нас вложенных циклов.

Цикл foreach

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

"; } ?>

Результат:

Это была коротка конструкция foreach, но она имеет и расширенную версию, которая кроме значения ячеек массива выводит ещё и названия ячеек (ключи):

$value) { echo "В разделе " . $key . " есть статья под названием: ". $value . "
"; } ?>

Результат:

Обращаю ваше внимание на то, что переменные мы можем называть как захотим, хоть $key и $value, хоть $xxx и $yyy.

Если массив, то используем только цикл foreach и никаких других. Именно этот цикл используется повсюду в VirtueMart, да и вообще везде.

Синтаксис цикла 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. Ртуть — это металл. */