Php функция выполняется один раз в цикле. Циклы. Пример. Массивы в PHP

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

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

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

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

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

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

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

Цикл 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 :

10001, "name" => "Ankur", "country" => "India"), array("id" => 20002, "name" => "Joy", "country" => "USA"), array("id" => 10003, "name" => "John", "country" => "UK"), array("id" => 20001, "name" => "Steve", "country" => "France"),); ?>

" . "" . "" . "" . ""; } ?>
ID Name Country
" . $table_data[$i]["id"] . "" . $table_data[$i]["name"] . "" . $table_data[$i]["country"] . "

Приведенный выше код будет генерировать таблицу.

Я постарался рассказать о PHP цикле for как можно проще. Но если у вас есть какие-либо вопросы, пожалуйста, задавайте их в комментариях.

Данная публикация представляет собой перевод статьи «PHP For Loop With Examples – PHP Loop Tutorial » , подготовленной дружной командой проекта

Операторы цикла используются очень часто в любых языках программирования. Почти все задачи используют циклы, поэтому стоит обратить особое внимание на их изучение. В 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 . В данной статье я бы хотел рассказать о различных циклах в PHP . Всего их существует 4 вида:

  • Итерационный цикл for
  • Цикл с предусловием
  • Цикл с постусловием
  • Цикл foreach

Давайте сразу на примерах разберем все циклы. Пусть будет такая задача: необходимо для 10 элементов вывести квадраты числа.
1) Итерационный цикл for :

"; } ?>

В данном цикле можно использовать несколько условий. Пусть необходимо проверить, если элемент равен 6, то больше ничего не выводить (оператор break пока не знаем). Можно написать так:

"; } ?>

2) Цикл с предусловием :

"; $i++; } ?>

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

3) Цикл с постусловием :

"; $i++; } while ($i <= 10) ?>

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

4) Цикл foreach . Данный цикл предназначен для перебора значений массива и появился только в четвертой версии языка PHP. Массив — это некоторый набор ключей, каждому из которых соответствует некоторое значение. Более подробно массивы будут разбираться в следующих статьях. Рекомендую подписаться на обновления, чтобы не пропустить.
Синтаксис данного цикла следующий:

Foreach (массив as $key=>$value) { блок операторов }

$key представляет собой ключ , $value — значение. Данная конструкция не изменяет исходный массив. Чтобы иметь возможность изменять исходный массив, необходимо использовать ссылочный тип:

Foreach (массив as $key=>&$value) { блок операторов }

Давайте с помощью данного цикла выведем содержимое всех переменных окружения (массив $_SERVER ):

$value) { echo "$key => $value
"; } ?>

Обязательно наберите данный пример и посмотрите, как всё работает.

Очень часто возникает ситуация, когда необходимо прервать выполнения цикла. Для этого необходимо использовать конструкцию break . У данной конструкции есть один необязательный параметр. По умолчанию данный параметр равен 1, т.е. мы прерываем выполнение текущего цикла. Давайте разберем такой пример: создадим 2 итерационных цикла от 1 до 5 и, если число будет равно 5, то выведем число. В данном случае, если мы будем использовать просто break , то число 5 будет выведено 5 раз. Если же мы напишем break(2) , то только один раз:

"; break; //запустите скрипт, а затем напишите break(2); } } } ?>

Данный оператор удобно использовать для циклов поиска. Как только мы нашли то, что искали — сразу завершаем цикл.

Оператор continue , наоборот, пропускает текущую итерацию цикла и переходит уже к следующей. Также в скобках можно указать уровень вложенности цикла.
Пример не буду приводить, дам домашнее задание на этот оператор.

Если внутри строки, заключенной в одинарные кавычки, обратный слэш «\» встречается перед любым другим символом (отличным от «\» и «"»), то он рассматривается как обычный символ и выводится, как и все остальные. Поэтому обратную косую черту необходимо экранировать, только если она находится в конце строки, перед закрывающей кавычкой.

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

echo "Также вы можете вставлять в строки
символ новой строки таким образом,
поскольку это нормально"
;
// Выведет: Чтобы вывести " надо
// перед ней поставить \
echo "Чтобы вывести \" надо перед " .
"ней поставить \\" ;
// Выведет: Вы хотите удалить C:\*.*?
echo "Вы хотите удалить C:\\*.*?" ;
// Выведет: Это не вставит: \n
// новую строку
echo "Это не вставит: \n новую строку" ;
// Выведет: Переменные $expand также
// $either не подставляются
echo "Переменные $expand также $either" .
"не подставляются" ;
?>

16.1. Пример. Использование управляющих последовательностей

17. Двойные кавычки

Если строка заключена в двойные кавычки «"», PHP распознает большее количество управляющих последовательностей для специальных символов.

Некоторые из них приведены в таблице.
Таблица. Управляющие последовательности.

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

Самым важным свойством строк в двойных кавычках является обработка переменных.

Heredoc

Другой способ определения строк – это использование heredoc-синтаксиса. В этом случае строка должна начинаться с символа <<<, после которого идет идентификатор. Заканчивается строка этим же идентификатором. Закрывающий идентификатор должен начинаться в первом столбце строки. Кроме того, идентификатор должен соответствовать тем же правилам именования, что и все остальные метки в PHP: содержать только буквенно-цифровые символы и знак подчеркивания и начинаться не с цифры или знака подчеркивания.

Heredoc-текст ведет себя так же, как и строка в двойных кавычках, при этом их не имея. Это означает, что вам нет необходимости экранировать кавычки в heredoc, но вы по-прежнему можете использовать перечисленные выше управляющие последовательности.

Переменные внутри heredoc тоже обрабатываются.

$str = <<Пример строки,охватывающей несколько
строчек, с использованием
heredoc-синтаксиса
EOD;
// Здесь идентификатор – EOD. Ниже
// идентификатор EOT
$name = "Вася" ;
echo <<Меня зовут "$name".
EOT;
// это выведет "Меня зовут "Вася"."
?>

Пример. Использование heredoc-синтаксиса
Замечание: Поддержка heredoc была добавлена в PHP 4.

18. Тип array (массив)

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

Определить массив можно с помощью конструкции array() или непосредственно задавая значения его элементам. Определение при помощи
array() array ( => value,
=> value1, ...)

Языковая конструкция array() принимает в качестве параметров пары ключ => значение, разделенные запятыми. Символ => устанавливает соответствие между значением и его ключом. Ключ может быть как целым числом, так и строкой, а значение может быть любого имеющегося в PHP типа. Числовой ключ массива часто называют индексом. Индексирование массива в PHP начинается с нуля.

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

Поэтому запись $a["1"] равносильна записи $a, так же как и $a["-1"] равносильно $a[-1].

$books = array ("php" =>
"PHP users guide" ,
12 => true );
echo $books [ "php" ];
//выведет "PHP users guide"
echo $books [ 12 ]; //выведет 1
?>

18.1. Пример. Массивы в PHP

Если для элемента ключ не задан, то в качестве ключа берется максимальный числовой ключ, увеличенный на единицу. Если указать ключ, которому уже было присвоено какое-то значение, то оно будет перезаписано. Начиная с PHP 4.3.0, если максимальный ключ – отрицательное число, то следующим ключом массива будет ноль (0).

// массивы $arr и $arr1 эквиваленты
$arr = array(5 => 43 , 32 , 56 , "b" => 12 );
$arr1 = array(5 => 43 , 6 => 32 ,
7 => 56 , "b" => 12 );
?>

18.2. Пример. Массивы в PHP

Если использовать в качестве ключа TRUE или FALSE, то его значение переводится соответственно в единицу и ноль типа integer. Если использовать NULL, то вместо ключа получим пустую строку. Можно использовать и саму пустую строку в качестве ключа, при этом ее надо брать в кавычки. Так что это не то же самое, что использование пустых квадратных скобок. Нельзя использовать в качестве ключа массивы и объекты.

Определение с помощью синтаксиса квадратных скобок

Создать массив можно, просто записывая в него значения. Как мы уже говорили, значение элемента массива можно получить с помощью квадратных скобок, внутри которых нужно указать его ключ например, $book["php"]. Если указать новый ключ и новое значение например, $book["new_key"]="new_value", то в массив добавится новый элемент. Если мы не укажем ключ, а только присвоим значение $book="new_value", то новый элемент массива будет иметь числовой ключ, на единицу больший максимального существующего. Если массив, в который мы добавляем значения, еще не существует, то он будет создан.

$books [ "key" ]= value ; // добавили в массив
// $books значение
// value с ключом key
$books = value1 ; /* добавили в массив
значение value1 с
ключом 13, поскольку
максимальный ключ у
нас был 12 */
?>

Для того чтобы изменить конкретный элемент массива, нужно просто присвоить ему с его ключом новое значение. Изменить ключ элемента нельзя, можно только удалить элемент (пару ключ/значение) и добавить новую. Чтобы удалить элемент массива, нужно использовать функцию unset().

$books = array ("php" =>
"PHP users guide" ,
12 => true );
$books =
"Book about Perl" ; // добавили элемент
// с ключом (индексом)
// 13 это эквивалентно
// $books =
// "Book about Perl";
$books [ "lisp" ] =
123456 ; /* Это добавляет к массиву новый