В процессе цикла php

В процессе цикла php

Цикл for самый сложный цикл в PHP. Он ведёт себя так же, как и в языке C. Синтаксис цикла for следующий:

for (expr1; expr2; expr3) statement

Первое выражение ( expr1 ) всегда вычисляется (выполняется) только один раз в начале цикла.

В начале каждой итерации оценивается выражение expr2 . Если оно принимает значение true , то цикл продолжается и выполняются вложенные операторы. Если оно принимает значение false , выполнение цикла заканчивается.

В конце каждой итерации выражение expr3 вычисляется (выполняется).

Каждое из выражений может быть пустым или содержать несколько выражений, разделённых запятыми. В expr2 все выражения, разделённые запятыми, вычисляются, но результат берётся из последнего. Если выражение expr2 отсутствует, это означает, что цикл будет выполняться бесконечно. (PHP неявно воспринимает это значение как true , так же, как в языке C). Это может быть не так бесполезно, как вы могли подумать, так как часто необходимо прервать цикл, используя условный оператор break вместо использования выражения в цикле for , которое принимает истинное значение.

Рассмотрим следующие примеры. Все они отображают числа от 1 до 10:

for ( $i = 1 ; ; $i ++) if ( $i > 10 ) break;
>
echo $i ;
>

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

PHP также поддерживает альтернативный синтаксис с двоеточием для циклов for .

for (expr1; expr2; expr3): statement . endfor;

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

/*
* Это массив с некоторыми данными, которые мы хотим изменить
* при работе цикла.
*/
$people = array(
array( ‘name’ => ‘Kalle’ , ‘salt’ => 856412 ),
array( ‘name’ => ‘Pierre’ , ‘salt’ => 215863 )
);

for( $i = 0 ; $i < count ( $people ); ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>

Вышеприведённый код может работать медленно, так как размер массива вычисляется в каждой итерации. Поскольку размер не меняется, цикл может быть легко оптимизирован с помощью промежуточной переменной, в которую будет записан размер массива, вместо повторяющихся вызовов функции count() :

$people = array(
array( ‘name’ => ‘Kalle’ , ‘salt’ => 856412 ),
array( ‘name’ => ‘Pierre’ , ‘salt’ => 215863 )
);

for( $i = 0 , $size = count ( $people ); $i < $size ; ++ $i ) $people [ $i ][ 'salt' ] = mt_rand ( 000000 , 999999 );
>
?>

Источник

В процессе цикла php

continue is used within looping structures to skip the rest of the current loop iteration and continue execution at the condition evaluation and then the beginning of the next iteration.

Note: In PHP the switch statement is considered a looping structure for the purposes of continue . continue behaves like break (when no arguments are passed) but will raise a warning as this is likely to be a mistake. If a switch is inside a loop, continue 2 will continue with the next iteration of the outer loop.

continue accepts an optional numeric argument which tells it how many levels of enclosing loops it should skip to the end of. The default value is 1 , thus skipping to the end of the current loop.

Читайте также:  Html url http cgi

$i = 0 ;
while ( $i ++ < 5 ) echo "Outer
\n» ;
while ( 1 ) echo «Middle
\n» ;
while ( 1 ) echo «Inner
\n» ;
continue 3 ;
>
echo «This never gets output.
\n» ;
>
echo «Neither does this.
\n» ;
>
?>

Omitting the semicolon after continue can lead to confusion. Here’s an example of what you shouldn’t do.

One can expect the result to be:

Changelog for continue

Version Description
7.3.0 continue within a switch that is attempting to act like a break statement for the switch will trigger an E_WARNING .

User Contributed Notes 20 notes

The remark «in PHP the switch statement is considered a looping structure for the purposes of continue» near the top of this page threw me off, so I experimented a little using the following code to figure out what the exact semantics of continue inside a switch is:

for( $i = 0 ; $i < 3 ; ++ $i )
echo ‘ [‘ , $i , ‘] ‘ ;
switch( $i )
case 0 : echo ‘zero’ ; break;
case 1 : echo ‘one’ ; XXXX ;
case 2 : echo ‘two’ ; break;
>
echo ‘ ‘ ;
>

— continue 1
— continue 2
— break 1
— break 2

and observed the different results. This made me come up with the following one-liner that describes the difference between break and continue:

continue resumes execution just before the closing curly bracket ( > ), and break resumes execution just after the closing curly bracket.

Corollary: since a switch is not (really) a looping structure, resuming execution just before a switch’s closing curly bracket has the same effect as using a break statement. In the case of (for, while, do-while) loops, resuming execution just prior their closing curly brackets means that a new iteration is started —which is of course very unlike the behavior of a break statement.

In the one-liner above I ignored the existence of parameters to break/continue, but the one-liner is also valid when parameters are supplied.

Источник

Циклы

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

Каждое отдельное исполнение последовательности инструкций в цикле называется итерацией. Циклы очень удобны для выполнения таких распространенных задач, как отображение результатов запроса, когда в цикле выполняется обход всех полученных строк. Для организации циклов PHP предоставляет конструкции while, for и do . while. Каждый цикл состоит из двух основных частей. Первая определяет, когда должно быть остановлено исполнение цикла, и напоминает операцию сравнения в инструкции if. Вторая – собственно фрагмент программы, выполняющий необходимые действия, который может состоять из единственной строки или нескольких строк, заключенных в фигурные скобки.

Читайте также:  Текст

Типичная логическая ошибка – отсутствие в теле цикла программного кода, влияющего на условие прекращения работы цикла, что может привести к созданию бесконечного цикла. Программный код цикла исполняется до тех пор, пока условное выражение возвращает значение TRUE. Чтобы избежать бесконечного цикла, который будет крутиться вечно, код тела цикла должен заставить условное выражение в определенный момент вернуть значение FALSE. Когда это произойдет, работа цикла прекратится, и исполнение продолжится со строки кода, расположенной непосредственно после цикла.

Курс PHP для начинающих

Цикл while

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

Пример ниже иллюстрирует использование цикла while:

Цикл while, тело которого исполняется 10 раз

$num = 1; while ($num "; $num++; > print 'Конец.';

Перед началом цикла значение переменной $num устанавливается равным 1. Это называется инициализацией переменной-счетчика. Каждый раз, когда исполняется блок кода, с помощью инструкции $num++ значение переменной $num увеличивается на 1. После десяти итераций выражение $num

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

Курс PHP для начинающих

Цикл do-while

Цикл do-while принимает условное выражение, как и цикл while, но оно помещается в конец конструкции. Синтаксис этого цикла:

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

$num = 11; do < $num--; print "Цикл номер $num
"; > while ($num 1); print 'Конец.';

Если бы мы использовали цикл while с этим условием, то он не выполнился бы ни разу, т.к. переменная $num = 11 > 10. В случае использования цикла do-while выполняется минимум одна итерация цикла. В нашем примере в этой итерации происходит декремент переменной $num и она становится равной 10, вследствие чего выполняются последующие итерации цикла, до тек пор пока $num > 1.

Курс PHP для начинающих

Цикл for

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

Ниже показан пример использования цикла for, в котором достигается аналогичный результат как в примере с циклом while:

Пример использования цикла for

for ($num = 1; $num "; > print 'Конец.';

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

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

Читайте также:  Python все файлы во вложенных папках

Цикл for без выражения инициализации

$num = 1; for ( ; $num "; > print 'Конец.';

Кроме того, допускается включение вместо каждого отдельного выражения в цикле for нескольких выражений, разделенных запятыми. Условие рассматривается как истинное, если любое из его подвыражений является истинным. Таким образом, несколько подвыражений, разделенных запятыми, эквивалентны одному выражению, соединенному операциями or. Например:

Цикл for с несколькими выражениями

Курс PHP для начинающих

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

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

  • Команда break обеспечивает выход из самой внутренней циклической конструкции, которая содержит эту команду.
  • Команда continue позволяет перейти в конец текущей итерации самой внутренней циклической конструкции, которая содержит эту команду.

Например, выполнение следующего кода:

не выводит ничего, поскольку число 1 является нечетным и поэтому цикл for немедленно заканчивается. С другой стороны, код

выводит строку «2 4 6 8» поскольку оператор continue позволяет пропустить все операторы, в которых были бы выведены нечетные числа.

Команда break позволяет программисту выбрать вариант организации цикла, полностью исключающий необходимость проверки главного условия завершения цикла. Рассмотрим следующий код, который обеспечивает формирование и вывод списка простых чисел (т.е. чисел, которые делятся только на само это число или на единицу):

$limit = 500; $number = 2; while(TRUE) // Бесконечный цикл < $test = 2; if ($number >$limit) break; while (TRUE) < if ($test >sqrt($number)) < print "$number "; break; >// Проверить, делится ли $number на $test if ($number % $test == 0) break; $test++; > $number++; >

В приведенном выше коде имеются два цикла while, во внешнем цикле осуществляется перебор всех чисел от 1 до 500, а во внутреннем фактически проверяется делимость с помощью каждого возможного делителя. Если во внутреннем цикле обнаруживается хотя бы один делитель, то рассматриваемое число не является простым, поэтому работа цикла прерывается без вывода какого-либо значения. Если же, с другой стороны, проверка доходит до потенциального делителя, который не меньше квадратного корня рассматриваемого числа, то можно уверенно предположить, что это число является простым, поэтому внутренний цикл прерывается после вывода данного числа. Наконец, внешний цикл прерывается после достижения значения предельного количества проверяемых чисел. В данном случае результатом является список простых чисел меньше 500:

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

Еще один цикл, который здесь мы не рассмотрели — это цикл foreach, который используется только для перебора в цикле содержимого массивов. Этот цикл будет рассмотрен при обсуждении массивов.

Источник

Оцените статью