Уроки PHP - урок 12 - Циклы while, foreach, for
Довольно часто в программирование, да и в быту, нам приходится выполнять повторяющиеся действия, пока нас не удовлетворит результат. В быту мы называем это мукой, в программирование циклами (loops). Циклы очень часто можно встретить в PHP, потому что это удобный способ перебирать массивы, вычислять функции, да и еще много чего можно сделать с помощью циклов. Начнем с наиболее простого и наиболее популярного while.
PHP while циклы
while очень прост, в круглых скобках мы пишем условия, в фигурных что нужно сделать когда условие выполняется. Условие это логическое выражение, которое имеет два состояние TRUE или FALSE. Если хотите еще раз понять о логических выражениях, то вам следует почитать урок об операторе if. А теперь пример while:
<?php $counter = 5; $newArray = array(); while($counter > 2){ $newArray[]= $counter; $counter--; } print_r($newArray); ?>
В результате будут выведены элементы массива 5,4,3. Давайте посмотрим как все происходило:
1 шаг. $counter = 5 (5 > 2)
2 шаг. $counter = 4 (4 > 2)
3 шаг. $counter = 3 (3 > 2)
4 шаг. $counter = 2 (2 = 2, условие перестало выполняться, поэтому и действия не произошло и в массиве нет 2)
Давайте разберем еще один пример табуляцию функции y(x) = 2x -1:
<?php // функция y(x) = 2x -1; $x = -10; while($x <= 10){ $y = 2*$x-1; print 'y(' . $x . ')=' . $y . '<br />'; $x++; } ?>
В результате столбиком выведутся значения функции при х [-10,10].
Это блок-схема цикла while, это общий вид работы этого цикла. У нас есть условие, есть тело цикла, пока условие выполняется наше тело цикла работает, а когда не выполняется, то php идет выполнять следующий код.
Еще один ВАЖНЫЙ момент. Если вы уберете строчку $x++, благодаря которой наш счетчик будет изменяться так что условие перестанет выпоняться. А если оно будет выполняться всегда?
<?php // функция y(x) = 2x -1; $x = -10; while($x <= 10){ $y = 2*$x-1; print 'y(' . $x . ')=' . $y . '<br />'; // $x++; } ?>
Тогда будет очень очень плохо. Произойдет критическая ошибка, наше тело цикла будет выполняться постоянно. Эта ситуация называется зацикливание. Избегайте таких ситуаций, зацикливание может служить причиной не работоспособности вашего сайта!
PHP foreach циклы
Еще один необходимый цикл, он часто встречается когда нужно перебрать массив. Под перебрать я подразумеваю, взять один элемент массива, провести с ним действия, потом взять следующий элемент массива, провести с ним те же действия и т.д. пройти по всем элементам.
Давайте рассмотрим это на примере, допустим у нас есть десять элементов "красные" и "синие", давайте подсчитаем количество красных элементов:
<?php $counter = 0; $newArray =array( 1=>'красный', 2=>'синий', 3=>'синий', 4=>'красный', 5=>'красный', 6=>'синий', 7=>'красный', 8=>'синий', 9=>'красный', 10=>'синий', ); foreach($newArray as $key){ if($key == 'красный'){ $counter++; } } print 'У нас есть ' . $counter . ' красных элементов'; ?>
Думаю с этим простым примером все понятно. Оператор as используется в данном случае для перебора элементов один за другим. Когда элементы закончатся, то выполнение foreach закончится.
Но не все массивы такие простые, бывает и так что массив содержит много вложенных массивов. И каждый из этих подмассивов можно также перебрать:
<?php $counter = 0; $newArray = array( 1=>array( 1 => 'красный', 2 => 'синий', 3 => 'синий', ), 2=>array( 1 => 'красный', 2 => 'красный', 3 => 'синий', ) ); foreach($newArray as $key){ foreach($key as $element){ if($element == 'красный'){ $counter++; } } } print 'У нас есть ' . $counter . ' красных элементов'; ?>
Я думаю с foreach пока более менее понятно, думаю на этом мы пока и остановимся foreach еще будет встречаться в моих примерах.
Цикл FOR
Цикл for похож на цикл while. For обычно используют, когда нужно заранее известное количество повторений цикла. Например 10 или 100 повторений:
for($i=0;$i<10;$i++){ //десять повторений }
Давайте теперь разберем из чего состоит цикл for.
for(){ }
Как и у прошлых циклов все параметры цикла for пишутся в круглых скобках. Обычно используют три параметра:
1. $i=0 - инициализация счетчика, переменной куда мы будем записывать номер текущего повторения.
2. $i<10 - условие при котором будет работать цикл for.
3. $i++ - увеличение счетчика на единицу, чтобы перейти на следующее повторение.