Цикл 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, покупка SSL сертификатов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Была ли эта статья полезна? Есть вопрос?
Cмотрите другие статьи: