Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5 семестр / Инструм.средства / ЛЕКЦИИ / Лекция №4 Общие понятия и описание PHP.doc
Скачиваний:
54
Добавлен:
17.02.2016
Размер:
186.88 Кб
Скачать

7.2. Циклы

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

* Цикл с предусловием (while).

* Цикл с постусловием (do-while).

* Цикл со счетчиком (for).

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

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

* Вычисляется значение логического выражения.

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

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

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

<?

$1 = 0;

while($i++ < 10) echo $i;

?>

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

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

$1 = 0;

while ($i<10)

{

$i ++;// увеличение счетчика

echo $i;

}

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

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

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

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

do

{

// тело цикла

}

while (условие);

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

<?

$1 = 1;

do echo $i; while ($i + + <10);

?>

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

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

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

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

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

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

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

<?

for ($i=Q; $i<10; $,! + + ) echo $1;

? >

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

<?

for ($1=0; $1++<10;) echo $1;

? >

В этом случае нам не нужны команды, выполняющиеся после итерации. Если вам нужно указать несколько команд, вы можете разделять их запятыми: for ($1=0, $j=0; $<10; $i++, $j++) echo $1;

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

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

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

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

тело цикла

endwhile;

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

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

тело цикла

endfor;

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

if (логическое_выражение) :

команды;

elseif(логическое_выражение2):

команды;

else:

команды;

endif;

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

Использовать альтернативный синтаксис имеет смысл, если вы предпочитаете включать в РНР-сценарии 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; $1 + + ) {

echo "$I\n";

for ($J=0; $J<5; 5J++) echo "$J ";

echo "\n";

}

Вложенный цикл выводит строку 01234. Данная строка будет выведена 10 раз — это число итераций внешнего цикла for.

Операторы break и continue

При использовании циклом можно использовать операторы break и continue. Первый прерывает работу всего цикла, а второй — только текущей итерации. Рассмотрим следующие примеры:

<?

$1 = 0;

while ($i + + < 10)

{

if ($i==3) break;

echo "Итерация $i\n";

)

?>

В этом примере после второй итерации работа цикла будет прервана и программа выведет строки:

Итерация 1

Итерация 2

Если же вместо оператора break использовать оператор continue, будет прервана работа только третьей итерации и мы получим вывод:

Итерация 1

Итерация 2

Итерация 4

Итерация 5

Итерация 6

Итерация 7

Итерация 8

Итерация 9

Итерация 10

Предположим, что у нас есть вложенные циклы, например,

for (...)

{

for (...)

{

for (...)

}

}

Нам нужно прервать работу определенного цикла, например, первого. Тогда как оператор break находится в теле третьего. В этом случае можно передать функции break параметр — номер цикла, например, break(l). Нумерация циклов начинается с единицы.

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

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

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

foreach(массив as $ключ=>$зкачение)

операторы;

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

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

<?

foreach($GLOBALS as $key=>$value)

echo "$key = Svalue\n";

?>

Примечание.

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

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