PHP: Перебор элементов массива

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

Есть два вида синтаксиса для данного цикла. Первый вид синтаксиса цикла foreach выглядит следующим образом:

  foreach ($array as $value) {
    инструкции
  }

Цикл будет перебирать заданный массив - $array (вместо $array подставляется название массива). На каждой итерации значение текущего элемента присваивается переменной $value (можно указать любое другое имя переменной).

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

Посмотрим, как он работает на примере:

<?php
  
  $my_arr = array(1, 2, 3, 4, 5);
  
  foreach ($my_arr as $value) {
    echo $value, " ";
  }

?>

Второй вид синтаксиса foreach, выглядит так:

  foreach ($array as $key => $value) {
    инструкции
  }

При использовании данной формы синтаксиса на каждой итерации дополнительно присваивается значение текущего ключа переменной $key (можно указать любое другое имя переменной):

<?php
  
  $my_arr = array(1, 2, 3, 4, 5);
  
  foreach ($my_arr as $key => $value) {
    echo "[$key] => ", $value, "<br>";
}

?>

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

<?php
  
  $my_arr = array(1, 2, 3);
  foreach ($my_arr as &$value) {
    $value *= 2;
	echo $value;
  }
  
  /* это нужно для того, чтобы последующие записи в
  переменную $value не меняли последний элемент массива */
  unset($value); // разорвать ссылку на последний элемент

?>
Примечание: Ссылка на последний элемент массива остается даже после того, как оператор foreach завершил работу. Поэтому рекомендуется удалять ее с помощью функции unset() как показано в примере выше. Давайте посмотрим что будет, если не использовать unset():
<?php
  
  $numbers = array(1,2,3,4,5);
   
  foreach ($numbers as &$num) {
	echo $num, " ";
  }
  
  // Присваиваем новое значение переменной $num
  $num = '100';
  echo '<br>';
 
  foreach ($numbers as &$num) {
	echo $num, " ";
  }

?>
Стоит отметить следующий момент, ссылку можно использовать только если перебираемый массив является переменной. Следующий код не будет работать:
<?php
  
  foreach (array(1, 2, 3) as &$value) {
    $value *= 2;
  }

?>
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | Обратная связь