| Циклы в PHP |
|
|
|
|
На втором месте по частоте использования, после конструкций условий (условных операторов), находятся циклы. Циклы позволяют повторять определенное (и даже неопределенное - когда работа цикла зависит от условия) колличество раз различные операторы. Данные операторы называются телом цикла. Проход цикла называется итерацией. PHP поддерживает три вида циклов:
При использовании циклов есть возможность использования операторов break и continue. Первый из них прерывает работу всего цикла, а второй - только текущей итерации. Рассмотрим циклы PHP: Цикл с предусловием while Цикл с предусловием while работает по следующим принципам:
Синтаксис цикла с предусловием: while (логическое_выражение) В данном случае телом цикла является инструкция. Обычно тело цикла состоит из большого числа операторов. Приведем пример цикла с предусловием while: <?php Обратите внимание на последовательность выполнения операций условия $x++<10. Сначала проверяется условие, а только потом увеличивается значение переменной. Если мы поставим операцию инкремента перед переменной (++$x<10), то сначала будет выполнено увеличение переменной, а только затем - сравнение. В результате мы получим строку 123456789. Этот же цикл можно было бы записать по-другому: <?php Если мы увеличим счетчик после выполнения оператора echo, мы получим строку 0123456789. В любом случае, мы имеем 10 итераций. Итерация - это выполение операторов внутри тела цикла. Подобно конструкции условного оператора if, можно группировать операторы внутри тела цикла while, используя следующий альтернативный синтаксис: while (логическое_выражение): Пример использования альтернативного синтаксиса: <?php Цикл с постусловием do while В отличие от цикла while, этот цикл проверяет значение выражения не до, а после каждого прохода (итерации). Таким образом, тело цикла выполняется хотя бы один раз. Синтаксис цикла с постусловием такой: do После очередной итерации проверяется, истинно ли логическое_выражение, и, если это так, управление передается вновь на начало цикла, в противном случае цикл обрывается. Пример скрипта, показывающего работу цикла с постусловием do-while: <?php Рассмотренный сценарий выводит: 12345678910 Цикл со счетчиком for Цикл со счетчиком используется для выполнения тела цикла определенное число раз. С помощью цикла for можно (и нужно) создавать конструкции, которые будут выполнять действия совсем не такие тривиальные, как простая переборка значения счетчика. Синтаксис цикла for такой: for (инициализирующие_команды; условие_цикла; команды_после_итерации) { тело_цикла; } Цикл for начинает свою работу с выполнения инициализирующих_команд. Данные команды выполняются только один раз. После этого проверяется условие_цикла, если оно истинно (true), то выполняется тело_цикла. После того, как будет выполнен последний оператор тела, выполняются команды_после_итерации. Затем снова проверяется условие_цикла. Если оно истинно (true), выполняется тело_цикла и команды_после_итерации, и.т.д. <?php Данный сценарий выводит: 0123456789 Есть вариант вывода строки 12345678910: <?php В данном примере мы обеспечили увеличение счетчика при проверке логического выражения. В таком случае нам не нужны были команды, выполняющиеся после итерации. Если необходимо указать несколько команд, их можно разделить запятыми, пример: <?php Приведем еще один, более практичный пример использования нескольких команд в цикле for: <?php Рассмотренный пример (да и вообще любой цикл for) можно реализовать и через while, только это будет выглядеть не так изящно и лаконично. Для цикла for имеется и альтернативный синтаксис: for(инициализирующие_команды; условие_цикла; команды_после_итерации): Цикл перебора массивов foreach В PHP4 появился еще один специальный тип цикла - foreach. Данный цикл предназначен специально для перебора массивов. Синтаксис цикла foreach выглядит следующим образом: foreach (массив as $ключ=>$значение) Здесь команды циклически выполняются для каждого элемента массива, при этом очередная пара ключ=>значение оказывается в переменных $ключ и $значение. Приведем пример работы цикла foreach: <?php Рассмотренный сценарий выводит: Андрей Иванов У цикла foreach имеется и другая форма записи, которую следует применять, когда нас не интересует значение ключа очередного элемента. Выглядит она так: foreach (массив as $значение) В этом случае доступно лишь значение очередного элемента массива, но не его ключ. Это может быть полезно, например, для работы с массивами-списками: <?php Внимание: Цикл foreach оперирует не исходным массивом, а его копией. Это означает, что любые изменения, которые вносятся в массив, не могут быть "видны" из тела цикла. Что позволяет, например, в качестве массива использовать не только переменную, но и результат работы какой-нибудь функции, возвращающей массив (в этом случае функция будет вызвана всего один раз - до начала цикла, а затем работа будет производиться с копией возвращенного значения). Конструкция break Очень часто для того, чтобы упростить логику какого-нибудь сложного цикла, удобно иметь возможность его прервать в ходе очередной итерации (к примеру, при выполнении какого-нибудь особенного условия). Для этого и существует конструкция break, которая осуществляет немедленный выход из цикла. Она может задаваться с одним необязательным параметром - числом, которое указывает, из какого вложенного цикла должен быть произведен выход. По умолчанию используется 1, т. е. выход из текущего цикла, но иногда применяются и другие значения. Синтаксис конструкции break: break; // По умолчанию Приведем примеры: <?php Рассмотренный сценарий выводит: Итерация 1 Если нам нужно прервать работу определенного (вложенного) цикла, то нужно передать конструкции break параметр - номер_цикла, например, break(1). Нумерация циклов выглядит следующим образом: for (...) // Третий цикл Конструкция continue Конструкция continue так же, как и break, работает только "в паре" с циклическими конструкциями. Она немедленно завершает текущую итерацию цикла и переходит к новой (конечно, если выполняется условие цикла для цикла с предусловием). Точно так же, как и для break, для continue можно указать уровень вложенности цикла, который будет продолжен по возврату управления. <?php Рассмотренный скрипт выводит: Итерация 1 Грамотное использование break и continue позволяет заметно улучшить "читабельность" кода и количество блоков else. По материалам сайта: http://www.php.su/
|



