Урок 5. Работа с циклами foreach, for, while в PHP

Урок 5. Работа с циклами foreach, for, while в PHP

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Создание и раскрутка сайтов

Вбиваю в ТОП-10, как гвозди

8-965-148-98-02, diplom07@mail.ru

Урок 5. Работа с циклами foreach, for, while в PHP

Урок 5. Работа с циклами foreach, for, while в PHP

www.homa.xp3.biz

Теория

Циклы используются для того, чтобы некоторый участок кода выполнился несколько раз подряд.

Зачем это нужно - представьте, что вам нужно возвести в квадрат 100 элементов массива. Если обращаться к каждому элементу отдельно по его ключу - это займет 100 строчек кода, и для того, чтобы написать этот код, нужно будет потратить довольно много времени.

Но это не нужно - у нас есть возможность сделать так, чтобы PHP выполнил за нас некоторую операцию нужное количество раз. Например, возвел все элементы массива в квадрат.

Делается это с помощью циклов.

Есть 3 вида циклов: foreach, while и for. Давайте разберемся, как с ними работать и чем они отличаются друг от друга.

Цикл foreach

Цикл foreach используется для прохождения по всем элементам массива.

Синтаксис такой: пишется ключевое слово foreach, а после него круглые скобки (). В этих скобках указывается переменная, в которой лежит массив, потом слово as, а после него - переменная, в которую при каждом проходе цикла будет ложится элемент массива.

К примеру, это может выглядеть так - foreach($a as$e), где $a - это массив, а в переменную $e будут ложиться элементы массива.

После команды foreach() должны идти фигурные скобки {}. Код, который лежит в этих скобках, называется телом цикла.

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

Итак, синтаксис цикла foreach выглядит так:

<?

foreach($a - имя_массива as$e - переменная_для_элемента_массива){//Код, который находится между фигурными скобками будет повторяться столько раз, сколько элементов у массива.}

?>

Давайте решим следующую задачу: пусть дан массив $a с 5 элементами, выведем столбец этих элементов с помощью цикла foreach.

Будем при каждом проходе цикла выводить на экран (с помощью echo) текущий элемент массива (тот, что лежит в переменной $elem):

<?

$a=[1,2,3,4,5];//Этот массив дан

foreach($a as$e)//Код, который находится между фигурными скобками будет повторяться столько раз, сколько элементов у массива (т.е. 5 раз).

{//В переменной $e будет лежать элемент массива, каждый раз разный: сначала 1-й, потом 2-й… Имя этой переменной обязательно должно отличаться от названия массива!

echo'<p>'.$e;//При каждом проходе цикла на экран будет выводится элемент массива, получится столбец элементов нашего массива $a=[1,2,3,4,5].

}

?>

Цикл foreach - очень мощная и полезная вещь, его следует использовать в том случае, если вам необходимо выполнить какие-либо действия с каждым элементом массива по отдельности, например, возвести их в квадрат:

<?//Возведем в квадрат каждый элемент следующего массива:

$a=[1,2,3,4,5];

foreach($a as$e){//В переменной $e будет лежать элемент массива, каждый раз разный: сначала 1, потом 2…

echo$e*$e;

}

?>

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

Чтобы посмотреть на практике, как работать с ключами, давайте сделаем следующее - при каждом проходе цикла будем выводить на экран ключ массива и соответствующий ему элемент через дефис:

<?//Дан ассоциативный массив $arr:

$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];

foreach($a as$k=>$e){//В переменной $e будут лежать элементы массива сначала 1, потом 2 и т.д., а в переменной $k будут лежать ключи массива сначала 'a', потом 'b' и т.д.:

echo$k.'-'.$e;//Выведет: 'a-1','b-2','c-3' и т.д.

}

?>

Если вам нужны только значения ассоциативного массива и не нужны ключи, то $ключ=> можно не писать:

<?//Массив ассоциативный, но ключи нам не нужны:

$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];

foreach($a as$e){

echo$elem;//Выведет: '1','2','3' и т.д.

}

?>

Фигурные скобки, так же, как и для if, можно не указывать - в этом случае цикл выполнит только 1 строку под ним (это относится ко всем циклам, не только к foreach):

<?

$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];

foreach($a as$e)

echo$e;//Выведет: '1','2','3' и т.д.

echo'hello'//Выведется после цикла

?>

Цикл foreach имеет альтернативный синтаксис:

<?//Фигурные скобки опущены, а цикл закрывается командой endforeach:

$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];

foreach($a as$e)://обратите внимание на двоеточие!

echo$e;//Выведет: '1','2','3' и т.д.

endforeach

?>

Как и в случае с конструкцией if-else, мы можем разорвать скобки PHP внутри цикла, далее написать что-то на HTML и опять открыть скобки PHP - в этом случае HTML код внутри цикла повторится столько раз, сколько проходов сделает цикл (в случае foreach - это количество элементов массива):

Как работать с HTML (этого многие не знают, обратите внимание!):

<?

$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];

foreach($a as$e){//HTML код внутри цикла повторится 5 раз:

?>

Мы закрыли скобки PHP и теперь пишем на HTML, но в цикле!

{<?echo$e?>}

<?

}

?>

Альтернативный синтаксис (удобен при работе с html, так как не нужны фигурные скобки):

<?

$a=['a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5];

foreach($a as$e)://не забываем ставить двоеточие!

?>

{<?echo$e?>}

<?

endforeach;

?>

Цикл while

Цикл while будет выполняться до тех пор, пока верно (истинно) выражение, переданное ему параметром. Смотрите синтаксис:

<?

while(пока выражение истинно){тут пишется код, который выполнится много раз;}//В начале каждого прохода цикла PHP проверяет выражение в круглых скобках: если оно верно, выполняет следующий проход цикла, а если неверно, - цикл завершает свою работу. Т.е. цикл закончится, когда выражение перестанет быть истинным. Если оно было ложным изначально, то он не выполнится ни разу.

//Как и для foreach есть альтернативный синтаксис:

while(пока выражение истинно):тут пишется код, который выполнится много раз;

endwhile;

?>

Вывести с помощью цикла while столбец цифр от 1 до 5.

Для этого введем переменную $i, которую будем использовать для того, чтобы остановить наш цикл.

Перед циклом переменной $i ставится значение 1, а внутри цикла будем при каждом проходе цикла увеличивать ее на 1. Сначала она будет 1, потом 2, потом 3 и т.д.

В условии окончания цикла поставим $i<=5 - это значит, что пока $i будет меньше или равна 5, цикл будет работать, а как только она станет 6, цикл закончит свою работу.

Используется переменная $i, чтобы считать количество проходов цикла. Однако, можно также воспользоваться ей для вывода нужного нам столбца чисел от 1 до 5. Просто при каждом проходе цикла выводится содержимое $i. Т.к. $i каждый раз увеличивается на 1, то сначала на экран выведется 1, потом 2 и т.д. до 5.

Вот код:

<?

$i=1;//Начальное значение переменной $i

while($i<=5){//Цикл закончится, когда $i станет больше 5

//Выводится значение переменной $i на экран при каждом проходе цикла:

echo'<p>'.$i;//С помощью оператора ++ увеличиваем $i на 1 при каждом проходе цикла:

$i++;

}

?>

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

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

Для счетчиков принято использовать буквы i, j, k.

Бесконечный цикл

Цикл while может выполняться бесконечно (но это приведет к зависанию скрипта!), достаточно передать ему выражение, которое никогда не станет ложным. Например, так:

<?

$v=true;

while($v===true){//Написанный здесь код будет выполняться вечно, пока скрипт не будет остановлен принудительно. Не стоит это повторять, это приведет к зависанию сервера!

}

?>

Вместо $v===true можно написать сокращенный вариант, просто $v (так же, как и сокращенный вариант для if):

<?

$v=true;

while($v){//Написанный здесь код будет выполняться вечно, пока скрипт не будет остановлен принудительно. Не стоит это повторять, это приведет к зависанию сервера!

}

?>

А можно вообще не вводить переменную $v, а в круглых скобках написать true:

<?

while(true){//Написанный здесь код будет выполняться вечно, пока скрипт не будет остановлен принудительно. Не стоит это повторять, это приведет к зависанию сервера!

}

?>

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

Посмотрите на следующий пример, в нем начальное значение $i равно 1, в цикле оно каждый раз увеличивается на 1, т.е. $i будет расти: сначала 1, потом 2, потом 3…

А условие окончания цикла такое: $i>=1. Т.е. пока $i больше или равна 1, цикл будет крутиться. В нашем случае это будет вечно (так как $i растет и никогда не станет меньше 1):

<?

$i=1;

while($i>=1){//Написанный здесь код будет выполняться вечно, пока скрипт не будет остановлен принудительно. Не стоит это повторять - это приведет к зависанию сервера!

$i++;

}

?>

Цикл for

Цикл for является альтернативой while. Он более сложен для понимания, но его любят больше, чем while, за то, что он занимает меньше строчек.

Его синтаксис выглядит так:

<?

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

?>

Начальные команды - это то, что выполнится перед стартом цикла. Они выполнятся только 1 раз. Обычно там размещают начальные значения счетчиков, пример: $i=0.

Условие окончания цикла - пока оно истинное, цикл будет работать, пример: $i<10.

Команды после прохода цикла - это команды, которые будут выполнятся каждый раз при окончании прохода цикла. Обычно там увеличивают счетчики, например: $i++.

Вывести столбец чисел от 0 до 9 с помощью цикла for:

<?//В начале цикла $i будет равно 0, цикл будет выполнятся пока $i<10, после каждого прохода к $i прибавляется 1:

for($i=0;$i<10;$i++){

echo'<p>'.$i;//Выведет 0, 1, …, 9

}

?>

Цикл без тела

Фигурные скобки в циклах можно не указывать, в этом случае цикл выполнит только 1 строку под ним (не рекомендую так делать, часто приводит к ошибкам):

<?

for($i=0;$i<10;$i++)//Точки с запятой нет

echo$i;//Выведет 0, 1, …, 9

?>

А вот если после ) поставить точку с запятой, цикл закроется и следующая строка в него не попадет, получится так называемый цикл без тела, который в нашем случае просто прокрутится и в результате изменит значение переменной $i:

<?

for($i=0;$i<10;$i++);//Точка с запятой есть

echo$i;//Выведет 9

?>

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

Несколько команд в цикле for

Если нам необходимо выполнить несколько команд в круглых скобках, указываем их через запятую:

<?

for($i=0,$j=2;$i<10;$i++,$j++,$i=$i+$j){}

?>

Давайте разберем приведенный цикл: до прохода цикла выполнятся 2 команды: $i=0, $j=2, а после каждой итерации - целых 3: $i++,$j++,$i=$i+$j.

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

Инструкция break

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

Зачем такое может понадобится? Например, перед нами стоит задача выводить элементы массива до тех пор, пока не встретится число 3. Как только встретится, цикл должен завершить свою работу.

Такое можно сделать с помощью инструкции break. Если выполнение цикла дойдет до нее, цикл закончит свою работу.

Давайте решим приведенную выше задачу: оборвем цикл, как только нам встретится число 3:

<?

$a=[1,2,3,4,5];

foreach($a as$e){

if($e===3)

break;//выходим из цикла

else

echo$e;

}

?>

Инструкция continue

Существует также инструкция continue, при достижении которой цикл начинает новую итерацию. Иногда может быть полезна для упрощения кода, хотя практически всегда задачу можно решить и без нее.

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович:
8-965-148-98-02, diplom07@mail.ru.
Печатать страницу: Урок 5. Работа с циклами foreach, for, while в PHP

Урок 5, Работа с циклами foreach, for, while в PHP, Урок, 5, Работа, с, циклами, foreach, for, while, в, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, Создание сайтов, web-программирование, seo-продвижение, создание и раскрутка сайтов, вбиваю в топ-10, как гвозди, попробуйте бесплатно, Создание сайтов, web-программирование, seo-продвижение, Урок, 5, Работа, с, циклами, foreach, for, while, в, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, создание, сайта, веб, заказ, web, дизайн, раскрутка, продвижение, новый, сайт, рейтинг, сео, seo, раскрутка сайтов, Вбиваю в ТОП-10, как гвозди, раскрутка сайтов, Делаю и раскручиваю сайты, Дмитрий Владимирович

×

Ваше письмо