Мой сайт — моя визитная карточка

Циклы в PHP

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

  • for — работает со счетчиком;
  • do-while — работает с постусловием;
  • while — работает с предусловием;
  • foreach — цикл для перебора массивов.

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

Цикл for

Синтаксис цикла for следующий.

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

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

// Массив значений
$array = array(
	'Яблоко',
	'Картошка',
	'Арбуз',
	'Цветок',
	'Вода',
	'Ртуть',
	'Кислород',
	'Пшеница',
	'Россия',
	'Москва',
	'Ливень'
);

// Условие цикла звучит так: пока счетчик не достигнет значения, равного количеству 
// элементов массива, тело цикла выполняется
for($i = 0; $i < count($array); $i++) {
	print "<br />".($i + 1).". ".$array[$i].".";
}

/* Результат работы цикла будет таким:
	1. Яблоко.
	2. Картошка.
	3. Арбуз.
	4. Цветок.
	5. Вода.
	6. Ртуть.
	7. Кислород.
	8. Пшеница.
	9. Россия.
	10. Москва.
	11. Ливень.
*/

Так как счетчик$i начинался с нуля, при каждой итерации мы к его значению прибавляли единицу, чтобы список выглядел более привычным. После каждой итерцации значение счетчика увеличивалось на единицу, и когда оно достигло 11, цикл остановился. Теперь давайте взглянем на цикл do-while.

Цикл do-while

Цикл do-while отличается тем, что он работает по постусловию. Это означает, что код, заключенный в теле цикла, выполнится как минимум один раз. Синтаксис цикла такой:

do {
	тело_цикла;
} while(условие);

Этот цикл используется довольно редко при веб-программировании, но может он вам и понадобится в ваших сценариях.

// Уже знакомый нам массив
$array = array(
	'Яблоко',
	'Картошка',
	'Арбуз',
	'Цветок',
	'Вода',
	'Ртуть',
	'Кислород',
	'Пшеница',
	'Россия',
	'Москва',
	'Ливень'
);

// Запускаем цикл
$i = 1;
do {
	print "<br />".$i.". ".$array[($i - 1)].".";
} while($i++ < count($array));

/* Результат работы цикла будет таким:
	1. Яблоко.
	2. Картошка.
	3. Арбуз.
	4. Цветок.
	5. Вода.
	6. Ртуть.
	7. Кислород.
	8. Пшеница.
	9. Россия.
	10. Москва.
	11. Ливень.
*/

Обратите внимание на отличие того, что мы выводим на экран в этом цикле от циклаfor. Так как код в теле циклаdo-while исполняется как минимум один раз, начальное значение счетчика было задано нулевым. Как работает цикл… выполняется код, затем проверяется условие. При первой итерации счетчик имел значение 1. После итерации единица оказалась меньше 11 (количества элементов). При последней итерации счетчик имел значение 11, а это никак не меньше 11. Цикл остановился. На do-while очень похож цикл while.

Цикл while

Цикл while является предусловным. Он выполнится только тогда, когда его условие истинно. То есть циклwhile  может и не выполниться вовсе. Его ситаксис таков:

while(условие) {
	тело_цикла;
}

Наряду с цикломfor циклwhile используется очень часто.

$array = array(
	'Яблоко',
	'Картошка',
	'Арбуз',
	'Цветок',
	'Вода',
	'Ртуть',
	'Кислород',
	'Пшеница',
	'Россия',
	'Москва',
	'Ливень'
);

$i = 1;


while($i++ <= count($array)) {
	print "<br />".$i.". ".$array[($i - 1)].".";
}

/* Результат работы цикла будет таким:
	1. Яблоко.
	2. Картошка.
	3. Арбуз.
	4. Цветок.
	5. Вода.
	6. Ртуть.
	7. Кислород.
	8. Пшеница.
	9. Россия.
	10. Москва.
	11. Ливень.
*/

Циклwhile для начинающих разработчиков наиболее прост и понятен.

Цикл foreach

Цикл foreach не похож на все перечисленные. Он появился в PHP4, предназначен для перебора массивов. Разработчику не нужно ничего выдумывать для этого. Всё легко и просто:

/**
  * Цикл foreach следует понимать как «для каждого из».
  * Массив, обрабатываемый циклом, передается переменной, которая 
  * доступна только внутри тела цикла. При желании можно обращаться
  * и к ключам массива.
  */
  
foreach(массив as элемент_массива) {
	тело_цикла;
}

foreach(массив as ключ_массива => элемент_массива) {
	тело_цикла;
}

Принцип работы циклаforeach совсем не такой как у цикловforwhile иdo-while. Поэтому для неопытных разработчиков довольно непросто понять что именно с его помощью можно (и даже нужно) делать.

// Изменим уже знакомый нам массив. Сделаем его ассоциативным.
$array = array(
	'Яблоко' => 'фрукт',
	'Картошка' => 'овощь',
	'Арбуз' => 'ягода',
	'Цветок' => 'растение',
	'Вода' => 'жидкость',
	'Ртуть' => 'металл',
	'Кислород' => 'газ',
	'Пшеница' => 'хлеб',
	'Россия' => 'наша Родина',
	'Москва' => 'столица нашей Родины',
	'Ливень' => 'попадос'
);

$i = 1;

// Можем сделать так
foreach($array as $v) {
	print "<br />".$i.". ".$v.".";
	$i++;
}

/* Получим такой вот неожиданный результат 

	1. фрукт.
	2. овощь.
	3. ягода.
	4. растение.
	5. жидкость.
	6. металл.
	7. газ.
	8. хлеб.
	9. наша Родина.
	10. столица нашей Родины.
	11. попадос.
	
*/

// А теперь сделаем иначе
foreach($array as $k => $v) {
	print "<br />".$i.". ".$k." — это ".$v.".";
	$i++;
}

/* Теперь результат будет таким

	1. Яблоко — это фрукт.
	2. Картошка — это овощь.
	3. Арбуз — это ягода.
	4. Цветок — это растение.
	5. Вода — это жидкость.
	6. Ртуть — это металл.
	7. Кислород — это газ.
	8. Пшеница — это хлеб.
	9. Россия — это наша Родина.
	10. Москва — это столица нашей Родины.
	11. Ливень — это попадос.

*/

Понимаете как работает этот цикл? Если нет, можете задать вопрос в комментариях к материалу.

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

$array = array(
	'Яблоко' => 'фрукт',
	'Картошка' => 'овощь',
	'Арбуз' => 'ягода',
	'Цветок' => 'растение',
	'Вода' => 'жидкость',
	'Ртуть' => 'металл',
	'Кислород' => 'газ',
	'Пшеница' => 'хлеб',
	'Россия' => 'наша Родина',
	'Москва' => 'столица нашей Родины',
	'Ливень' => 'попадос'
);

$i = 1;

// Пример работы цикла с конструкцией continue
foreach($array as $k => $v) {
	if($k != 'Кислород') continue;
	print "<br />".$i.". ".$k." — это ".$v.".";
	$i++;
}

/* Результат будет таким

	1. Кислород — это газ.

*/

$i = 1;

// Пример работы цикла с конструкцией break
foreach($array as $k => $v) {
	if($k == 'Кислород') break;
	print "<br />".$i.". ".$k." — это ".$v.".";
	$i++;
}

/* Результат будет таким

	1. Яблоко — это фрукт.
	2. Картошка — это овощь.
	3. Арбуз — это ягода.
	4. Цветок — это растение.
	5. Вода — это жидкость.
	6. Ртуть — это металл.

*/
Я разместил эту статью: 26.07.2013
Количество просмотров: 3142
Яндекс.Метрика