- PHP/Циклы
- Циклы [ править ]
- Цикл с предусловием while [ править ]
- Цикл с постусловием do while [ править ]
- Цикл со счетчиком for [ править ]
- Цикл перебора массивов foreach [ править ]
- Конструкция break [ править ]
- Конструкция continue [ править ]
- Использование циклов в PHP
- Foreach – перебор массива
- Результат:
- Альтернативный синтаксис foreach
- For – цикл с счетчиком
- Результат:
- Альтернативный синтаксис
- Результат:
- Альтернативный синтаксис for
- While – цикл с предусловием
- Результат:
- Альтернативный синтаксис while
- Do-while – цикл с постусловием
- Результат:
- Управление циклами
- Break
- Continue
- Результат:
- Php foreach со счетчиком
- Unpacking nested arrays with list()
PHP/Циклы
Любой PHP-код представляет собой совокупность определенных конструкций: операторов, циклов и функций.
Логические выражения, используемые в конструкциях языка PHP, в частности в циклах, были описаны на предыдущей странице, вернуться и почитать можно тут: Условные операторы.
Циклы [ править ]
Циклы необходимы, когда требуется повторить определенное/неопределенное количество раз набор операторов. Набор таких операторов называется телом цикла и выделяется фигурными скобками. Один проход цикла называется итерацией. Существуют четыре вида циклов, они представлены ниже.
Цикл с предусловием while [ править ]
Данная конструкция имеет вид
while (логическое выражение) инструкция; > ?>
Итак, сначала вычисляется значение логического выражения. Если значение равно true, то выполняется тело цикла, в противном случае происходит выход из цикла.
Заметим, что если тело цикла представляет собой только один оператор, то допустима следующая запись без использования фигурных скобок
while (логическое выражение) оператор1; ?>
$count = 7; while ($count 10) print('*'); $count++; > ?>
В данном примере мы инициализируем переменную $count значением 7. Затем в цикле, пока значение переменной меньше 10, выполняем две операции: печатаем на экран звездочку и увеличиваем значение переменной $count на 1. Рассмотрим пошагово:
Перед циклом инициализируем переменную $count = 7
Сравниваем значение переменной 7 < 10 - true ->заходим в цикл
увеличиваем значение переменной -> $count = 8
Снова сравниваем значение переменной 8 < 10 - true ->остаемся в цикле
увеличиваем значение переменной -> $count = 9
Сравниваем значение переменной 9 < 10 - true ->остаемся в цикле
увеличиваем значение переменной -> $count = 10
Сравниваем значение переменной 10 < 10 - false ->выходим из цикла
Таким образом, в результате работы программы на экран будет выведена строка: ***
Цикл с постусловием do while [ править ]
Данная конструкция имеет вид
do инструкция; > while (логическое выражение); ?>
Отличительной особенностью цикла do while является то, что значение логического выражения проверяется после каждого прохода цикла, это обеспечивает выполнение тела цикла хотя бы один раз. После очередной итерации проверяется, истинно ли логическое выражение, и, если это так, управление передается вновь на начало цикла.
Заметим, что если тело цикла представляет собой только один оператор, то допустима следующая запись без использования фигурных скобок
do оператор1; while (логическое выражение); ?>
$count = 10; do print('*'); $count++; > while ($count 10); ?>
Инициализируем переменную $count значением 10. Заходим в цикл и выполняем две операции: печатаем на экран звездочку и увеличиваем значение переменной $count на 1. Значение переменной $count стало равным 11, проверяем условие ($count < 10) - false ->выходим из цикла. В результате работы программы на экране отобразится следующая строка: *
Цикл со счетчиком for [ править ]
Данная конструкция имеет вид
for (инициализирующая команда; условие цикла; команда после итерации) инструкция; > ?>
for (инициализирующая команда; условие цикла; команда после итерации) оператор1; ?>
Цикл со счетчиком for применяется для выполнения тела цикла определенное число раз. Работа цикла начинается с выполнения инициализирующих команд(выполняются единожды). Далее проверяется условие цикла, если оно истинно(true), то выполняется тело цикла. Затем выполняются команды после итерации и снова проверяется условие цикла. Если оно ложно(false), происходит выход из цикла.
В результате работы следующего скрипта на экран будет выведена строка: 12345
Цикл перебора массивов foreach [ править ]
Данный цикл применим при работе с массивами, если требуется обработать каждый его элемент.
Сама конструкция имеет вид
foreach ($массив as $обозначение) инструкция; > ?>
foreach ($массив as $обозначение) оператор1; ?>
Заметим, что $обозначение — это переменная, обозначающая просматриваемый элемент, мы вправе дать ей любое имя и обращаться к ней в теле цикла.
$array = array(1, 2, 3, 4, 5); foreach ($array as $var) echo "$var "; ?>
В данном скрипте мы сперва инициализируем массив, состоящий из пяти элементов(числа от 1 до 5), далее для каждого элемента выполняем печать на экран. В результате чего на экране получаем строку: 1 2 3 4 5
Конструкция break [ править ]
Конструкция, позволяющая прервать выполнение цикла в ходе очередной итерации.
$x = 3; while (true) $x--; if ($x 0) echo 'Значение $x оказалось меньше нуля'; break; > echo "$x \n"; > ?>
В данном примере переменная $x инициализирована значением 3. В бесконечном цикле будем уменьшать значение переменной на один и печатать его на экран, но если значение переменной окажется меньше нуля, то выведем поясняющий комментарий и выйдем из цикла.
Циклы могут быть вложенными, в таком случае используется break вместе с номером прерываемого цикла.
while (. ) //внешний цикл while (. ) //внутренний цикл break; //Прервет выполнение внутреннего цикла break 2; //Прервет выполнение внешнего цикла > break; //Прервет выполнение внешнего цикла break 2; //Вызовет ошибку, поскольку текущий цикл не вложен ни в какой другой > ?>
Конструкция continue [ править ]
Конструкция, позволяющая перейти к следующей итерации цикла.
$array = array(1, 2, 3, 4, 5); foreach ($array as $var) if ($var == 3) continue; echo "$var "; > ?>
В данном скрипте мы сперва инициализируем массив, состоящий из пяти элементов(числа от 1 до 5), далее в цикле проверяем не равен ли текущий элемент трём и выполняем печать на экран. Если встретился элемент равный трём, то переходим к следующей итерации, то есть к следующему элементу. В результате чего на экране получаем строку: 1 2 4 5
Аналогично break, для continue можно указать уровень вложенности цикла.
Использование циклов в PHP
PHP имеет четыре вида циклов и операторы управления ими, рассмотрим поподробнее.
Foreach – перебор массива
Предназначен для перебора элементов массива.
$array = array( 1 => 'Значение 1', 2 => 'Значение 2', 3 => 'Значение 3', 4 => 'Значение 4', ); // Вывод ключей foreach ($array as $key => $val) < echo $key . '
'; > // Вывод значений foreach ($array as $key => $val) < echo $val . '
'; >
Результат:
1 2 3 4 Значение 1 Значение 2 Значение 3 Значение 4
Альтернативный синтаксис foreach
For – цикл с счетчиком
Цикл работает пока выполняется заданное условие. Обычно применяется в качестве счетчика.
// Счетчик от 0 до 5 for ($n = 0; $n // Счетчик от 5 до 0 for ($n = 5; $n >= 0; $n--)
Результат:
Альтернативный синтаксис
$array = array( 'Значение 1', 'Значение 2', 'Значение 3', 'Значение 4', ); for ($n = 0; $n < count($array); $n++) < echo $array[$n] . '
'; >
Результат:
Значение 1 Значение 2 Значение 3 Значение 4
Альтернативный синтаксис for
While – цикл с предусловием
Т.е. если перед началом итерации условие выполняется, то цикл продолжает свою работу.
Результат:
Альтернативный синтаксис while
Do-while – цикл с постусловием
В отличии от while этот цикл проверяет выполнения условия после каждой итерации. Do-while не имеет альтернативного синтаксиса.
Результат:
Управление циклами
Break
Вызов break или break 1 в цикле останавливает его.
Для вложенных циклов используется break 2 и т.д.
Continue
Используется для пропуска итерации.
Результат:
Для вложенных циклов по аналогии с break 2 , break 3 – continue 2 , continue 3 .
Php foreach со счетчиком
The foreach construct provides an easy way to iterate over arrays. foreach works only on arrays and objects, and will issue an error when you try to use it on a variable with a different data type or an uninitialized variable. There are two syntaxes:
foreach (iterable_expression as $value) statement foreach (iterable_expression as $key => $value) statement
The first form traverses the iterable given by iterable_expression . On each iteration, the value of the current element is assigned to $value .
The second form will additionally assign the current element’s key to the $key variable on each iteration.
Note that foreach does not modify the internal array pointer, which is used by functions such as current() and key() .
In order to be able to directly modify array elements within the loop precede $value with &. In that case the value will be assigned by reference.
$arr = array( 1 , 2 , 3 , 4 );
foreach ( $arr as & $value ) $value = $value * 2 ;
>
// $arr is now array(2, 4, 6, 8)
unset( $value ); // break the reference with the last element
?>?php
Reference of a $value and the last array element remain even after the foreach loop. It is recommended to destroy it by unset() . Otherwise you will experience the following behavior:
// without an unset($value), $value is still a reference to the last item: $arr[3]
foreach ( $arr as $key => $value ) // $arr[3] will be updated with each value from $arr.
echo » < $key >=> < $value >» ;
print_r ( $arr );
>
// . until ultimately the second-to-last value is copied onto the last value
// output:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>
It is possible to iterate a constant array’s value by reference:
Note:
foreach does not support the ability to suppress error messages using @ .
Some more examples to demonstrate usage:
/* foreach example 1: value only */
?php
foreach ( $a as $v ) echo «Current value of \$a: $v .\n» ;
>
/* foreach example 2: value (with its manual access notation printed for illustration) */
$i = 0 ; /* for illustrative purposes only */
foreach ( $a as $v ) echo «\$a[ $i ] => $v .\n» ;
$i ++;
>
/* foreach example 3: key and value */
$a = array(
«one» => 1 ,
«two» => 2 ,
«three» => 3 ,
«seventeen» => 17
);
foreach ( $a as $k => $v ) echo «\$a[ $k ] => $v .\n» ;
>
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a [ 0 ][ 0 ] = «a» ;
$a [ 0 ][ 1 ] = «b» ;
$a [ 1 ][ 0 ] = «y» ;
$a [ 1 ][ 1 ] = «z» ;
foreach ( $a as $v1 ) foreach ( $v1 as $v2 ) echo » $v2 \n» ;
>
>
/* foreach example 5: dynamic arrays */
foreach (array( 1 , 2 , 3 , 4 , 5 ) as $v ) echo » $v \n» ;
>
?>
Unpacking nested arrays with list()
It is possible to iterate over an array of arrays and unpack the nested array into loop variables by providing a list() as the value.
foreach ( $array as list( $a , $b )) // $a contains the first element of the nested array,
// and $b contains the second element.
echo «A: $a ; B: $b \n» ;
>
?>
The above example will output:
You can provide fewer elements in the list() than there are in the nested array, in which case the leftover array values will be ignored:
foreach ( $array as list( $a )) // Note that there is no $b here.
echo » $a \n» ;
>
?>
The above example will output:
A notice will be generated if there aren’t enough array elements to fill the list() :
foreach ( $array as list( $a , $b , $c )) echo «A: $a ; B: $b ; C: $c \n» ;
>
?>
The above example will output:
Notice: Undefined offset: 2 in example.php on line 7 A: 1; B: 2; C: Notice: Undefined offset: 2 in example.php on line 7 A: 3; B: 4; C: