Цикл foreach и инструкции break/continue в PHP

Без цикла foreach не обходится ни один сайт. Разберёмся как его использовать и можно ли прерывать или пропускать итерации цикла.

Цикл foreach

Цикл foreach - это лучший помощник программиста сайтов. Его можно встретить практически в любом коде сайта. А выполняет он очень полезную функцию: обходит массив по элементам. Его синтаксис довольно простой, но потребуется время, чтобы вникнуть. Поэтому начнём с простейшего примера:
<?php
   $a = array('один', 'два', 'три');
   foreach( $a as $b ){
      echo $b;
      echo '<br>';
   }
?>
В результате выполнения такого кода, на экране появится следующее:
один
два
три
Разберём по порядку, что же произошло. Внутри скобок foreach написано $a as $b, что означает: "бери по порядку элементы массива $a и помещай их значение в $b". Что программа и делает: берёт первый элемент массива $a со значением 'один' и задаёт это значение переменной $b. А в теле цикла идёт вывод значения "echo $b;". Как только все команды из тела цикла выполнены, начинается вторая итерация: берётся второй элемент из массива $a со значением 'два'. Производится то же самое действие. И так далее, пока в массиве не останется элементов.

Давайте усложним задачу и представим, что у массива есть ключи и их тоже надо передавать. А чтобы было не скучно, сделаем ключи текстовыми:
<?php
   $a = array(
      'one'   => 'один', 
      'two'   => 'два', 
      'three' => 'три'
   );
   foreach( $a as $b => $с ){
      echo $b;
      echo ' = ';
      echo $c;
      echo '<br>';
   }
?>
В результате выполнения такого кода, на экране появится следующее:
one = один
two = два
three = три
Как можно видеть из примера, цикл отличается выражением в скобках $a as $b => $с. Это выражение означает "бери по порядку элементы массива $a и помещай их значение в $с, а ключи элементов в переменную $b".
Обратите внимание, что если внутри цикла изменить значение переменных $b или , то значение переменной $a не поменяется.
Чтобы изменить значение элемента массива $a, можно использовать внутри цикла foreach конструкцию $a[$b] = 'новое_значение'. Тогда в массиве $a, в элементе с ключом $b, изменится значение на 'новое_значение'

Прерывание цикла (break)

Бывают случаи, когда надо прервать цикл, выйти из него не продолжая. В этом поможет инструкция break. Попробуем протестировать его:
<?php
   $a = array('один', 'два', 'три');
   foreach( $a as $b ){
      if($b == 'три') break;
      echo $b;
      echo '<br>';
   }
?>
В результате выполнения такого кода, на экране получится следующее:
один
два
Слово 'три' не будет напечатано, потому что в коде перед ним сработает инструкция break и цикл завершится.

Следующая итерация цикла (continue)

Иногда нужно не завершать цикл, а перейти к следующей итерации, к следующему элементу. Для этого используется инструкция continue:
<?php
   $a = array('один', 'два', 'три');
   foreach( $a as $b ){
      if($b == 'два') continue;
      echo $b;
      echo '<br>';
   }
?>
В результате выполнения такого кода, на экране получится следующее:
один
три
На элементе со значением 'два' сработает инструкция continue и последующие команды не будут выполнены. А вместо этого цикл начнётся заново, взяв следующий элемент массива $a.
Инструкции break и continue работают не только в циклах foreach, но и в циклах while и for.

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

Пример из реального проекта

Приведём пример цикла, который приближен к циклу из реального проекта. Этот цикл будет находиться на странице со списком новостей и будет выводить название новости и короткое описание. Сам цикл будет проходить внутри массива, который описывает всю страницу. Именно таким способом программируются современные сайты: в начале ".php" файла вы загружаете данные из базы данных и собираете их большой-большой массив, обрабатываете и подготавливаете для вывода. А во второй части файла вы выводите значение элементов массива вперемешку с HTML кодом, но ничего не считаете и не обращаетесь к базе:
<?php
   $arResult = array();

   // задаём свойства страницы
      $arResult['title'] = 'Список новостей';

   // обрабатываем новости
      $arResult['items'] = array();
      $arResult['items'][] = array(
         'name' => 'Название первой новости',
         'text' => 'Текст первой новости',
      );
      $arResult['items'][] = array(
         'name' => 'Название второй новости',
         'text' => 'Текст второй новости',
      );
?>

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title><?=$arResult['title']?></title>
   </head>
   <body>
      <?
         foreach($arResult['items'] as $item){
            echo $item['name'];
            echo '<br>';
            echo $item['text'];
            echo '<br>';
            echo '<br>';
         }
      ?>
   </body>
</html>
В результате вызова этой страницы, в окне браузера мы увидим:
Название первой новости
Текст первой новости

Название второй новости
Текст второй новости
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: