Всё о циклах в PHP

"Все аспекты самостоятельного создания и продвижения сайтов
от практика с многолетним опытом." — блог Рудь Сергея
info@site-on.net
Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!
10.05.2014

Здравствуйте дорогие читатели и постоянные подписчики! Пришло время продолжить цикл статей о 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 заходит внутрь цикла и продолжает его исполнять. Часть С – тоже самое что часть А, как правило в Части С мы делаем какие-то преобразования с счётчиком. Например:

<?php
for ($i=1; $i < 8 ; $i++) {
    echo 'Итерация номер '. $i . '<br>';
}
echo 'ВЫШЛИ ИЗ ЦИКЛА и пошли дальше по коду...';
?>

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

алгоритм цикла for

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

Цикл While

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

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

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

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

<?php
$i=1;
while ($i < 8) {
    echo 'Итерация номер '. $i . '<br>';
    $i++;
}

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

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

Цикл do... while

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

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

Пример:

<?php
$i=1;
do{
    echo 'Итерация номер '. $i . '<br>';
    $i++;
}while($i < 8);

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

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

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

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

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

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

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

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

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

<?php
$i=1;
do{
    echo 'Итерация номер '. $i . '<br>';
    $i++;
}while($i != 0);

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

Результат:

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

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

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

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

<?php
$i=1;
while ($i < 8) {
    echo 'Итерация номер '. $i . '<br>';
    if ($i === 5) break; // выходим из цикла если $i равно 5
    $i++;
}

echo 'Я умею считать только до 5 :(';
?>

Результат:

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

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

<?php

$i=0;
while ($i < 8) {
    $i++;
    if ($i === 5) continue;
    echo 'Итерация номер '. $i . '<br>';
}

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

Результат:

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

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

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

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

Результат:

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

Цикл foreach

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

<?php
foreach (массив as переменная) {
    // ваш код
}
?>

Пример:

<?php
$blog['html'] = 'Основы HTML';
$blog['php'] = 'Всё о циклах в PHP';
$blog['joomla'] = 'Вышел новый релиз Джумла!';

foreach ($blog as $value) {
    echo $value . '<br>';
}
?>

Результат:

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

<?php
$blog['html'] = 'Основы HTML';
$blog['php'] = 'Всё о циклах в PHP';
$blog['joomla'] = 'Вышел новый релиз Джумла!';

foreach ($blog as $key=>$value) {
    echo 'В разделе <b>' . $key . '</b> есть статья под названием: <b>'. $value . '</b><br>';
}
?>

Результат:

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

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

С уважением, .
Пожалуйста, оцените эту статью
Средняя оценка: 4.36 из 5 (проголосовало: 11)
Статья оказалась вам полезной? Подпишитесь, чтобы не пропустить новые!

Ваш email:
Вы можете помочь развитию проекта, сделав всего 1 клик:
Спасибо!
Пожалуйста, прокомментируйте, как Вам моя статья?
Имя:
Комментарий:

Если Вы хотите вставить код, пожалуйста, заключайте его в [code][/code]

Подписаться на новые комментарии:

E-mail:


Защита от спама: у треугольника три...
Ответ:
Подписаться на новые комментарии без комментирования - Email:
Защита от спама: у треугольника три...
Ответ:
Использую для работы
Мои расширения
Свежие статьи
Рекомендую
Горячо обсуждаемые
Подписка
  • Следовать в twitter:
  • Подписаться по RSS:
  • Подписаться по E-mail:
  • Следить ВКонтакте:
  • Следить на Facebook:
Пользовательское соглашение об условиях использования сайта и Политика конфиденциальности
Перепечатывание или копирование материалов сайта (текста, изображений и другого содержимого) для их публичного или коммерческого использования в сети Интернет, либо в печатных изданиях строго запрещены. При нарушении данного правила, с нашей стороны будут предприняты соответствующие меры, вплоть до судебной жалобы.
© site-on.net
Шрифт: +стандартно-