html.okpython.net
HTML и CSS для начинающих

PHP :: Цикл foreach

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

PHP Результат htmlCodes
<?php

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

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

echo '<br>';

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

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

?>

Пример №1. Цикл foreach

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

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

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

PHP Результат htmlCodes
<?php

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

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

echo '<br>';

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

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

?>

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

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

Быстрый переход к другим страницам