• доступно о веб-разработке
09.11.2012 PHP, Технологии

Циклы / Неделя PHP

Вся наша жизнь, хотим мы того или нет, построена на циклах. Многие живут, не замечая этого. Но вот программировать, не просто замечая или не используя циклов нельзя. Сейчас вы поймете, почему.

В прошлом уроке мы говорили о массивах. Примеры были достаточно простые, какие редко когда встречаются в реальной практике.

А теперь представьте себе, что у вас массив на 1000 элементов.

И вам нужно узнать значение каждого из них.

Что будете делать? Перебирать вручную по циферкам? Так можно лучшие годы жизни истратить на рутинную операцию.

Поэтому и были придуманы циклы.

Всего есть несколько цикловых операторов:

  • for
  • foreach
  • do while

Рассмотрим каждый из них.

for

Данный оператор завязан на числовую переменную, которую можно использовать как индекс в массиве.

Смотрите:

<?php

$data = array(
 // здесь тысяча элементов должна быть
);

for($i = 0; $i < sizeof($data); $i++){
   echo "Элемент с порядковым номером $i имеет значение $data[$i].<br/>";
}

Обратите внимание на аргументы оператора.

Первый аргумент — начальное условие. Мы тут же объявляем переменную $i и задаем ей значение равное нулю.

Второй аргумент — конечное условие. Цикл будет исполняться, пока оно истинно, и прекратит исполнение, когда оно станет ложью (false).

Третий аргумент — выполняемое по завершению цикла задание. В данном случае вы видите инкремент переменной $i.

Вы верно слышали о языках C и С++? Два плюса или два минуса — это знаки операций инкремента и декремента.

То есть это либо повышение значения переменной на 1, либо понижение.

Смотрите, следующие выражения равносильны:

<?php

$i++;

$i = $i + 1;

Поняли?

В указанном выше цикле значение $i будет расти с каждой итерацией (повторением цикла) до тех пор, пока не станет равно значению функции sizeof($data), которая определяет количество элементов в массиве, переданном ей как аргумент.

http://php.net/sizeof

sizeof — это алиас (то есть ссылка, равнозначная функция) к функции count. Поэтому неважно, какую из этих двух функций вы используете. Они равны.

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

Однако, такой цикл подходит тогда и только тогда, когда у массива числовые ключи элементов.

Что же делать, если ключи строковые?

Тогда на помощь приходит цикл foreach.

foreach

Для цикличного обхода массива (или объекта, но об этом позже) foreach числовая переменная не нужна.

<?php

$data = array(
   // здесь указано бесчисленное множество элементов массива
);

foreach($data as $value){
    echo $value;
}

// Если же нам еще и ключи элементов нужны, то надо так писать:

foreach($data as $key => $value){
   echo "Элемент с ключом $key имеет значение $value";
}

Поэтому именно foreach является наиболее часто используемым оператором цикла в PHP.

Запомните оба варианта синтаксиса — с ключом и без него.

while…do

Данный цикл используется редко или же вообще не используется.

Выглядит он так:

<?php

$i = 0;

while($i < 10){
  echo $i;
  $i++;
}

// или его аналог

do {
 echo $i;
 $i++;
}
while($i < 10)

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

По опыту скажу, что этот цикл практически никогда не нужен. С любыми задачами с легкостью справляются foreach и for.

И последнее. Это задание для вас.

Чем отличается запись ++$i от записи $i++?

Сделайте цикл for с выводом значения $i и попробуйте два разных типа записи инкремента, а в комментариях сообщите, в чем между ними разница.

Поделиться

Комментарии Правила дискуссии

Читайте ранее:
Условные операторы / Неделя PHP

Мы уже более-менее начинаем разбираться с типами данных. Но данные — они только хранят информацию. И для того, чтобы получить...

Закрыть