Цикл

 

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

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

В общем говоря существует несколько типов циклов:

  • Циклы с предусловием
  • Циклы с постусловием
  • Циклы со счетчиком
  • Циклы по коллекциям (встречаются в C#, Java, JavaScript, Perl, Python, PHP, LISP, Tcl и др.)

Сваливать описание этих типов циклов и их синтаксис в этот пост я не вижу смысла. По каждому из этих типов циклов будет отдельный пост с примером реализации на PHP.

Циклы в PHP

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

Как и C, PHP поддерживает три вида циклов:

- Цикл с предусловием (while).
- Цикл с постусловием (do-while).
- Цикл со счетчиком (for).

Цикл с предусловием While

Принцип работы цикла с предусловием:

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

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

while  ( логическое выражение ) инструкция;

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

<? $i=0;
while ($i++ < 10)  echo $i; ?>

Данная программа выведет строку 12345678910. Обратите внимание на последовательность выполнения операций условия $i++ < 10. Сначала проверяется условие, а только потом увеличивается значение переменной. Если же мы поставим операцию инкремента перед переменной (++$i<10), то сначала будет выполнено увеличение переменной, а только потом - сравнение. В результате мы получили бы строку 123456789.

Этот же цикл можно было бы записать по-другому:

$i = 0; while ($i<10) { $i ++;// увеличение счетчика echo $i;}

Если мы увеличим счетчик после выполнения оператора echo, мы получим строку 0123456789. Но в любом случае, у нас будет 10 итераций. Итерация - это проход цикла, то есть выполнение инструкций тела цикла.

Цикл с постусловием do while

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

Синтаксис цикла do while такой:

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

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

<? $i = 1;
do echo $i;  while ($i++ <10);}

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

Цикл со счетчиком For

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

Например, в цикле while удобно ждать определенного события, например, когда возвращаемое какой-то функцией значение будет истинно (а такая ситуация может и не произойти). Цикл for удобно использовать, например, для заполнения массива.

Синтаксис цикла for:

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

Оператор for начинает свою работу с выполнения команд инициализации. Данные команды выполняются всего лишь один раз. После этого проверяется условие: если оно истинно, выполняется тело цикла. После того, как будет выполнен последний оператор тела, выполняются команды «после итерации». Затем снова проверяется условие, в случае, если оно истинно, выполняется тело цикла и поститерационные команды, и т.д.

Выведем привычную нам строку:

<? for ($i=0; $i<10; $i++) echo $i; ?>

Данный сценарий выведет строку 0123456789. Нам же нужна строка 12345678910, поэтому нужно обеспечить увеличение счетчика при проверке логического выражения:

<? for   ($i=0;  $i++<10;.j  echo $i; ?>

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

for  ($i=0,   $j=0;  $<10;   $i++,   $j++)  echo $i;

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

Альтернативный синтаксис

Циклы while и for имеют альтернативный синтаксис. Для цикла while он таков:

while (логическое_выражение): тело цикла   endwhile;

А для цикла for - такой:

for {команды_инициализации;  условие;   команды_после_итерации):  тело цикла     endfor;

Обратите внимание на двоеточие - его наличие обязательно! Альтернативный синтаксис также предусмотрен для оператора if-else:

if   (логическое_выражение):
команды;
elseif(логическое_выражение2):
команды;
else:
команды;
endif;

Использовать данный синтаксис или нет - ваше личное дело. Что же касается меня, то я предпочитаю использовать «классику» - обыкновенный синтаксис.

Использовать альтернативный синтаксис имеет смысл, если вы предпочитаете включать в PHP-сценарии HTML-код, а не выводить его с помощью echo. В этом случае альтернативный синтаксис облегчает использование операторов if-else, while и for:

<?if ($REMOTE_ADDR):?>
<hl>Welcome home!</hl>
<?else:?>
<hl>Hello</hl>
<?endif; ?>

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

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

for ($1=0; $К10; $I++) {
echo "$I\n";
for ($J=0; $J<5; $J++)
echo "$J ";
echo "\n";}

Вложенный цикл выводит строку 0 1 2 3 4. Данная строка будет выведена 10 раз - это число итераций внешнего цикла for.

Цикл перебора массивов foreach

В версии PHP4 появился еще один вид цикла - foreach. Данный цикл предназначен специально для перебора массивов.

Синтаксис данного цикла таков:

foreach (массив as $ключ=>$значение) операторы;

Операторы, содержащиеся в теле цикла, будут выполнены для каждого элемента массива. Переменная $ключ будет содержать имя ключа элемента, а переменная $ значение - значение элемента.

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

<?foreach($GLOBALS as $key=>$value) echo  "$key = $value\n";?>

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

В PHP есть один очень полезный стандартный массив $GLOBALS. Ключом данного массива является имя переменной, а значением элемента массива - значение переменной. Об этом важном массиве мы еще не раз поговорим в этой книге.

 

 

© gruppa-43im2009

Конструктор сайтов - uCoz