Эту статью я пишу для новичков, которые только начинают изучать PHP . Расскажу я в этой статье о всевозможных циклах в PHP , так как данной статьи у меня на сайте не было. Были только , но, несмотря на общую схожесть, это всё-таки не то. В PHP есть 4 вида циклов .
- WHILE
- DO-WHILE
- 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 PHP .
Оператор цикла for в PHP
Цикл for в PHP выполняет блок кода определенное количество раз на основе счетчика. При этом количество раз, которое блок кода должен быть выполнен, определяется предварительно до входа в тело цикла.
for является одним из самых сложных видов цикла. В PHP цикл for ведет себя аналогично C . Ниже приведена структура синтаксиса:
for(expression1;expression2;expression3) statement;
В приведенном выше описании ключевое слово for указывает на цикл. В скобках определяются выражения, а затем инструкция, которую необходимо выполнить.
Как работает цикл for в PHP?
Чтобы понять, как работает цикл for , нам нужно понять эти три выражения. Выражение: expresison1 является первым, которое выполняется только один раз перед входом в цикл. Оно выполняется безоговорочно. Это значит, что первый раз перед входом в цикл выражение будет выполнено.
Expresison1 называется инициализирующим выражением, поскольку оно используется для инициализации счетчика, который используется в выражениях expression2 и expression3 .
Expression2 (проверка условия ) проверяется для того, чтобы определить разрешает ли условие выполнить инструкцию или нет. Первый раз оно запускается после expression1 , затем — перед входом в цикл.
Обычно expression2 содержит условный оператор, чтобы проверить, возвращает ли условие true или false . Если условие вернет true , тогда будет выполняться оператор, написанный в цикле.
Expression3 выполняется в конце каждой итерации после оператора цикла. Обычно программисты называют его выражением инкремента. Оно используют это выражение для увеличения значения счетчика, который был инициализирован в expression1 и проанализирован в expression2 .
Все три выражения не являются обязательными. Также можно создать PHP цикл, как показано ниже:
for(;;) statement;
for(;expression2;expression3) statement;
Если у нас несколько строк в цикле for , используйте фигурные скобки, как показано ниже:
for(expression1;expression2;expression3){ statement1; statement2; statement3; }
Блок-схема цикла for
На первом шаге выполняется выражение expression1 . Если вы внимательно посмотрите блок-схему, то обнаружите, что для expression1 не существует условия. Выражение expression1 похоже на поток выполняемой программы.
На следующем шаге сразу после выражения expression1 выполняется expression2 . Оно проверяет, выполняется ли условие цикла. Если условие истинно, то дальше будет выполняться цикл, иначе поток выйдет из цикла.
Если expression2 вернет true , то на третьем шаге будет выполнен оператор, написанный в цикле for . После этого будет выполнено третье выражение expression3 .
После выполнения выражения expression3 поток снова проверяет expression2 , и цикл продолжается до тех пор, пока expression2 не вернет false .
Простой пример цикла for в PHP
Рассмотрим случай, когда нужно вывести на экран числа от 1 до 10 через запятую. Ниже приведен код:
for($i=1;$i<=10;$i++) print $i.",";
Или с фигурной скобкой:
for($i=1;$i<=10;$i++) { print $i.","; }
Выражение $i=1 является expression1 , которое выполняется безоговорочно. Мы используем expression1 для инициализации переменной, равной $i=1 .
Expression2 – это выражение $i :
$i=1; for(;$i<=10;$i++) { print $i.","; }
$i=1; for(;$i<=10;) { print $i.","; $i++; }
Сложное выражение в цикле for
Можно написать три выражения в цикле for . Мы можем написать несколько операторов в каждом выражении в цикле for . Операторы нужно разделить запятой.
Рассмотрим пример предыдущего кода для вывода числа от 1 до 10 . С помощью нескольких операторов в выражении можно написать код, приведенный ниже:
for($i=1; $i<=10; print $i . ",", $i++);
Здесь выражение expression3 – это print $i.’,’, $i++ , которое объединяет два оператора, один – print $i. ‘,’ , а второй – $ i++ .
Выше приведен пример, в котором мы использовали несколько операторов в выражении expression3 . Но также можно использовать несколько операторов в любом выражении. Например:
Аналогично можно вывести все нечетные числа меньше 10 с помощью следующего кода:
Массив и цикл for в PHP
С помощью PHP цикла for можно выполнять итерацию в массиве. Например, у нас есть массив, который содержит имена разных людей. Нам нужно вывести на экран все имена:
$names = array("Ankur", "John", "Joy"); $count = count($names); for($counter=0;$counter<$count;$counter++){ print $names[$counter]; }
Также можно использовать многомерный массив в цикле for :
$names = array(array("id" => 1, "name" => "Ankur"), array("id" => 2, "name" => "Joe"), array("id" => 3, "name" => "John"),); $count = count($names); for ($counter = 0; $counter < $count; $counter++) { print "Name".$names[$counter]["name"]." ID".$names[$counter]["id"]."n"; }
Вложенный цикл for
Можно использовать вложенный цикл for в PHP . Пример:
$metrix = array(array(1, 2, 3), array(2, 1, 3), array(3, 2, 1),); $count = count($metrix); for ($counter = 0; $counter < $count; $counter++) { $c_count = count($metrix[$counter]); for ($child = 0; $child < $c_count; $child++) { echo $metrix[$counter][$child]; } }
У нас есть многомерный массив, и мы используем два цикла for PHP для отображения значений его элементов.
При использовании вложенного цикла можно использовать выражение родительского цикла for в дочернем. Например:
for ($i = 1; $i <= 5; $i++) {
for ($j = 1; $j <= $i; $j++) {
echo "*";
}
echo "
";
}
Приведенная выше программа является одной из самых популярных для вывода символа * в форме прямоугольного треугольника.
Инкремент в цикле for
Почти в каждом из приведенных выше примеров мы использовали выражение expression3 , то есть последнее выражение в качестве инструкции инкремента. Также мы часто увеличивали значение на единицу во всех примерах, например, $i++ или $j++ и так далее. Но мы можем увеличивать счетчик в соответствии с нашими требованиями. Например, чтобы вывести все нечетные числа от 1 до 15 , можно инициализировать цикл значением 1 и выполнять итерации до 15 , увеличивая счетчик на 2 :
for($counter = 1; $counter <=15;$counter=$counter+2){ print $counter.","; }
Результатом работы приведенного выше кода будет «1,3,5,7,9,11,13,15 ». Здесь мы увеличиваем переменную счетчика на +2 с помощью выражения $counter=$counter+2 .
Выход из цикла for
Можно прервать цикл при определенном условии, используя ключевое слово break . Оно не является частью цикла и используется для прерывания выполнения операторов for , foreach , while , do-while и switch . Давайте посмотрим, как ключевое слово break останавливает цикл for .
Простой пример, в котором мы выводим все числа в массиве до 100 :
$series = array(1, 8, 5, 3, 100, 9, 7); for ($i = 0, $count = count($series); $i <= $count; $i++) { if (100 == $series[$i]) { break; } echo $series[$i] . " "; }
Здесь мы прерываем цикл, проверив, равно ли значение элемента массива 100 .
Также можно прервать вложенный PHP цикл по массиву, передав глубину, например, break 1 , break 2 и так далее. Посмотрите приведенный ниже пример:
for ($i = 0;; $i++) { switch ($i) { case 1: echo "This is one "; break 1; //Это прервет только оператор switch case 2: echo "This is two "; break 1; // Это снова прервет только оператор switch case 3: echo "This is three "; break 2; //Это прервет и switch , и цикл for } }
Здесь break 1 прерывает оператор switch , но break 2 прервет текущий оператор, а также родительский, то есть и switch , и for .
Использование continue в цикле for
В предыдущем разделе мы узнали, как выйти из цикла. Но что, если нужно пропустить одну итерацию цикла и вернуться назад к циклу? Для этого в PHP есть ключевое слово continue .
Вспомним пример вывода нечетных чисел. Все, что мы сделали, это начали цикл с 1 , увеличивали счетчик на 2 и выводили результат. Реализуем этот пример, используя continue :
for ($i = 0; $i < 20; $i++) { if ($i % 2 == 0) { continue; } echo $i . ","; }
В приведенном выше примере мы проверяем выражение $i%2 == 0 , и если оно верно, используя ключевое слово continue , мы пропускаем остальную часть цикла и возвращаемся к выражению expression3 ($i++) , а затем к expression2 ($i :
Иногда нужно перенести данные из таблицы базы данных в массив с помощью PHP .
Синтаксис цикла for выглядит следующим образом:
Данный цикл состоит из ключевого слова for , за которым следуют круглые скобки, содержащие внутри три выражения, разделенных точками с запятой. Он имеет следующий порядок выполнения:
- В начале цикла выполняется инициализирующее выражение, оно всегда вычисляется (выполняется) только один раз в самом начале.
- Далее следует условное выражение. Перед началом каждой итерации вычисляется значение условного выражения (условие выполнения), если оно принимает значение TRUE, то тело цикла выполняется, если оно принимает значение FALSE , выполнение цикла завершается. Если при первой проверке условие оказывается ложным, тело цикла не выполнится ни разу.
- В самом конце, после выполнения действий в теле цикла обрабатывается последнее выражение (следующее выражение после условия). В данном случае это инкрементирующее выражение - оно увеличивает с помощью инкремента значение переменной-счетчика.
Простой пример цикла for:
На самом деле цикл for является почти универсальным, поскольку он допускает самые разные варианты своего применения.
Цикл for без частей заголовка
Каждое из выражений в заголовке цикла for может отсутствовать.
Если инициализация не нужна или происходит в другом месте, инициализирующее выражение не нужно. Перепишем немного предыдущий пример:
Обратите внимание, символ точки с запятой обязателен, так как означает отсутствующее выражение. Отсутствие выражения условия эквивалентно расположению в условии значения TRUE .
В этом случае цикл будет выполняться бесконечно. Если отсутствует инкрементирующее выражение, то оно должно быть в теле цикла иначе цикл будет выполняться бесконечно.
Не стоит забывать о том, что любое из трех выражений или все сразу можно опустить, но разделительные точки с запятой (;) следует ставить всегда.
Несколько выражений в заголовке цикла for
В заголовке цикла for каждое выражение разделенное точкой с запятой может содержать по несколько выражений, разделенных запятыми. Поэтому можно использовать выражения любой сложности.
"; } ?>
Если в условии выполнения используется несколько выражений, разделенных запятыми, то они вычисляются все, но результат берется из последнего.
Вложенные циклы
Так же как и условные операторы, циклы могут быть вложенными. Простой пример с одним уровнем вложенности:
";
for ($j = 0; $j < 2; $j++) {
echo "Вложенный цикл.
";
}
}
?>
Цикл PHP foreach можно использовать следующим образом:
foreach($array_name as $value){ //код, который должен выполняться }
foreach($array_name as $key =>$value){ // //код, который должен выполняться }
Пример использования цикла foreach с числовым массивом
В этом примере мы создадим массив из пяти элементов с числовыми значениями. После этого цикл PHP foreach будет использован для выполнения итерации этого массива. Внутри цикла foreach мы использовали echo , чтобы вывести значения массива:
Посмотреть демо-версию и код
Пример с ключами и значениями массива
В этом примере описан другой способ использования цикла foreach PHP . Для этого мы создали ассоциативный массив из трех элементов. В него входят имена сотрудников (в качестве ключей ) и суммы заработной платы (в качестве значений ):
Посмотреть демо-версию и код
Пример изменения значения элемента массива в цикле foreach
Также можно c помощью PHP array foreach можно изменять значения элементов массива. Для этого используется «& » перед «$ » для переменной значения. Например:
&$value_of_element
Значение будет изменено. Чтобы вам было понятнее, рассмотрим следующий пример.
В этом примере мы создали числовой массив из пяти элементов. После этого использовали цикл foreach для отображения значений элементов.
Затем создали еще один цикл foreach , где перед $value_of_element добавляется «& «. Внутри фигурных скобок присваиваем новые значения элементам массива.
Чтобы увидеть разницу до и после присвоения новых значений, массив отображается с помощью функции print_r() .
Посмотреть демо-версию и код
Для чего используется цикл PHP foreach?
Цикл PHP foreach используется для работы с массивом. Он перебирает каждый его элемент.
Также можно использовать для работы с массивами цикл for . Например, используя свойство length , чтобы получить длину массива, а затем применить его в качестве оператора max . Но foreach делает это проще, так как он предназначен для работы с массивами.
Если вы работаете с MySQL , то для этого данный цикл подходит еще больше. Например, можно выбрать несколько строк из таблицы БД и передать их в массив. После этого, используя цикл foreach , перебрать все элементы массива с выполнением какого-либо действия.
Обратите внимание, что можно использовать цикл foreach с массивом или только с объектом.
Применение цикла foreach
В PHP существует два способа использования цикла foreach PHP. Оба описаны ниже.
- Синтаксис первого метода использования:
foreach($array_name as $value){ echo $value }
При этом нужно указать имя массива, а затем переменную $value .
Для каждой итерации значение текущего элемента присваивается переменной $value . После завершения итерации переменной присваивается значение следующего элемента. И так до тех пор, пока все элементы массива не будут перебраны.
- Синтаксис второго метода (PHP foreach as key value ):
Это подходит для ассоциативных массивов, в которых используются пары ключ / значение.
Во время выполнения каждой итерации значение текущего элемента будет присвоено переменной $value_of_element. Кроме этого ключ элемента присваивается переменной $key_of_element.
Если вы работаете с числовыми массивами, то можно использовать первый метод, в котором не нужны ключи элементов.
Данная публикация представляет собой перевод статьи «PHP foreach loop 2 ways to use it » , подготовленной дружной командой проекта
В некоторых случаях необходимо выполнять код до тех пор, пока не будет достигнут нужный результат. Для этого PHP предоставляет циклы while , for и foreach .
Синтаксис цикла while в PHP
Синтаксис цикла while :
Пример использования цикла while в PHP :
В примере цикла while в php , приведенном выше, сначала инициализируется переменная счётчика $ i значением 0 .
Условие цикла while – это $ i < 10 . Это означает, что мы проверяем, меньше ли переменная, чем 10.
Всё, что заключено в фигурные скобки – это инструкции (тело ) цикла. Они повторяются до тех пор, пока условие возвращает значение true . В примере, приведенном выше, $ i выводится на экран, а затем переменная счётчика увеличивается на 1. Это важно чтобы условие цикла, в конце концов, перестало соблюдаться. Если условие цикла соблюдается всегда, например, потому что вы забыли увеличить переменную счётчика $ i , тогда скрипт войдёт в бесконечный цикл. К счастью, через некоторое время PHP прекратит выполнение вашего скрипта.
Вы можете сделать как условие цикла, так и тело цикла сколь угодно сложными. Например, использовать while внутри while php, использовать php while для перебора массива (array ) или определить более одной переменной счётчика:
$min) {
echo "count1: $count1; count2: $count2
";
$ counter1 += 2; // Сокращённое выражение для $counter1 = $counter1 + 2;
$counter2 -= 3; // Сокращённое выражение для $count2 = $count2-3;
}
?>
В примере определяются две переменные: $ counter 1 и $ counter 2 . Одна переменная увеличивается на 2, а другая уменьшается на 3. Цикл while выполняется, пока соблюдаются оба условия $ count 1 < $ max и $ count 2 > $ min .
Влияние ключевых слов break и continue на цикл
С помощью команды break можно прервать процесс выполнения цикла while в PHP . Допустим, мы ищем определённого пользователя. Тогда можно пройти по всем пользователям в цикле while . Если найдём нужного пользователя, то остановим цикл с помощью ключевого слова break .
Простой пример использования ключевого слова break :
while ($count < $max) { if ($count == 10) { echo "Останавливаемся на числе 10"; break; } echo "$count,"; $counter += $increment; // увеличивает $count на значение $increment } ?>
Этот код перебирает числа по возрастанию от 0 до $max = 30 , прибавляя к переменной $ count значение $ increment , другими словами число 2. Но если переменная $ count будет равна 10, произойдет выход из цикла while в php .
Ключевое слово continue не завершает цикл while в php полностью , а лишь пропускает оставшуюся часть тела цикла. Приведенный ниже пример демонстрирует это:
while ($count < $max) {
$counter += $increment; // увеличивает $payer на $increment
if ($count >= 10 && $count <= 15) {
echo "Число между 10 и 15
";
continue;
}
echo "$count
";
}
?>
Этот цикл начинается с 0 и увеличивает счётчик до значения $ max . Переменная $ counter всегда увеличивается на значение переменной $ increment . То есть принимает значения 0, 2, 4 и т.д.
Если переменная $ count имеет значение между 10 и 15, на экран будет выведен текст и оператор continue пропустит остальные выражения в теле цикла. В результате мы видим, что числа 10, 12 и 14 не выводятся.
Цикл do-while в PHP
Небольшой модификацией while является цикл do — while . В данном случае условие цикла проверяется только после выполнения его тела. Это значит, что тело цикла выполнится хотя бы один раз.
Синтаксис цикла do-while :
Предположим, что мы хотим сгенерировать случайное число, которое должно быть либо между 0 и 10, либо между 20 и 30. Согласно определению функции rand ($ min , $ max ) , можно случайным образом сгенерировать число между $ min и $ max :
10 && $random < 20) { $random = rand (0, 30); }
echo "Наше случайное число: $random"; ?>
Используя php цикл do — while , можно получить значение выражения без инициализации переменной $ random . Тело цикла выполняется перед тем, как проверяется условие. Тогда пример, приведенный выше, будет выглядеть следующим образом:
10 && $random < 20);
echo " Наше случайное число: $random"; ?>
Новичка цикл do-while может слегка сбить с толку. Если вы до конца не понимаете его цели, то это не проблема. Циклы do-while редко используются на практике.