Цикл 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 воздействуют только на родительский цикл, в котором находятся. Если несколько циклов вложено один в другой, а инструкция стоит внутри второго, то она никак не повлияет на первый цикл.
Обратите внимание, что инструкции 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>
В результате вызова этой страницы, в окне браузера мы увидим:
Название первой новости Текст первой новости Название второй новости Текст второй новости