belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

4.6. Цикл foreach

Несмотря на универсальность применения цикла for, который позволяет сымитировать поведение практически любой управляющей конструкции языка PHP, для последовательного перебора элементов массива используется специально созданный для этого оператор цикла foreach, для которого предусмотрены два варианта синтаксиса (см. пример 4.12).

<?php
$arr=["one"=>1,"two"=>2,3,4,5]; //Создали массив с 5 элементами

foreach($arr as $value){ 		  //Первый вариант цикла
	echo $value." ";  			  //Выведет в ходе цикла все значения элементов массива
}	

echo '<br>';

foreach($arr as $key=>$value){  //Второй вариант цикла
	echo $key."=>".$value." ";   //Выведет в ходе цикла все пары 
										  //'ключ=>значение' элементов массива
}

/* Как видим, второй вариант позволяет дополнительно перечислить и 
использовать не только значения элементов массива, но и ключи массива. */ 
?>

Пример 4.12. Цикл foreach

Как видно из примеров, для организации цикла foreach в первом случае указывается ключевое слово foreach; затем в круглых скобках записывается условие цикла, состоящее из имени массива $array, элементы которого будут последовательно перечисляться, ключевого слова as и имени переменной $value, которой при каждой новой итерации цикла будут присваиваться соответствующие значения элементов массива; после условия при помощи фигурных скобок записывается тело цикла. Во втором случае в условие цикла добавляется еще одна переменная $key, которой при каждой новой итерации цикла будут присваиваться строки с именами ключей перечисляемых в цикле значений элементов массива. Понятно, что имена для переменных $key и $value могут быт выбраны произвольно.

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

Если возникает необходимость изменения элементов массива при помощи оператора цикла foreach, то значения переменной $value следует передавать по ссылке используя перед ней символ '&' (см. пример 4.13).

<?php
$arr=[1,2,3,4];//Создали массив с 4 элементами

foreach($arr as &$value){ //Работаем со значениями массива по ссылке 
	$value*=2;	//Увеличиваем каждый элемент массива в два раза
	echo $value." ";  	  //Выведет в ходе цикла 2 4 6 8
}	

echo '<br>';

unset($value); //Разрываем ссылку на последний элемент, ведь если мы случайно 
					//изменим значение переменной $value, то изменится и последний 
					//элемент массива
echo $arr[0];  //Выведет 2, т.е. элементы массива благодаря циклу изменились

/* При использовании значений по ссылке массив должен быть присвоен переменной,
поэтому запись вида foreach([1,2,3,4] as &$value)... недопустима */
?>

Пример 4.13. Изменение элементов массива с помощью цикла foreach

Следует помнить, что ссылка на последний элемент массива остается даже после того, как оператор foreach завершил работу. Поэтому рекомендуется удалять ее с помощью функции unset() во избежание нежелательных последствий, связанных со случайным присвоением переменной нового значения и, как следствие, изменения последнего элемента массива. Кроме того, перебор элементов массива по ссылке возможен только, если перебираемый массив является переменной.

Контрольные вопросы и задания

  1. Опишите оператор цикла foreach. В чем заключается его преимущество перед циклом for при использовании с массивами?

Словарь новых английских слов

if [if] – если.
else [els] – иначе, еще.
switch [swɪtʃ] – переключение.       
case [keɪs] – блок, контейнер.
break [breɪk] – прерывать.
while [wʌɪl] – до тех пор пока.
do [duː] – делать.
for [fɔː] – для.
each [iːtʃ] – каждый.
continue [kənˈtɪnjuː] – продолжать.
default [dɪˈfɔːlt] – по умолчанию.
key [kiː] – ключ.
as [æz] – как.
value [ˈvaljuː] – значение.
Комментарии (0)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх