Короткий ответ: foreach в PHP нужен, чтобы пройти по массиву и выполнить код для каждого элемента. Самый частый вариант выглядит так: foreach ($items as $item), где $items — массив, а $item — текущий элемент
Этот цикл используют везде: вывод товаров, список пользователей, меню, сообщения чата, строки таблицы, результаты из базы данных. Если вы учите PHP для сайтов, foreach понадобится очень быстро
Простой пример
<?php
$fruits = ['яблоко', 'банан', 'груша'];
foreach ($fruits as $fruit) {
echo $fruit . PHP_EOL;
}
Результат
яблоко
банан
груша
На каждой итерации в переменную $fruit попадает очередной элемент массива
foreach с ключом и значением
Если нужны не только значения, но и ключи
<?php
$user = [
'name' => 'Динар',
'city' => 'Казань',
'role' => 'admin',
];
foreach ($user as $key => $value) {
echo $key . ': ' . $value . PHP_EOL;
}
Результат
name: Динар
city: Казань
role: admin
Конструкция $key => $value читается так: на каждой итерации возьми ключ и соответствующее значение
Вывод массива в HTML
Частый сценарий для сайта
<?php
$products = [
['title' => 'Книга', 'price' => 500],
['title' => 'Курс', 'price' => 1500],
['title' => 'Консультация', 'price' => 3000],
];
?>
<ul>
<?php foreach ($products as $product): ?>
<li>
<?php echo htmlspecialchars($product['title']); ?> —
<?php echo htmlspecialchars($product['price']); ?> ₽
</li>
<?php endforeach; ?>
</ul>
Синтаксис foreach (...): endforeach; часто используют в шаблонах, потому что он лучше читается внутри HTML
Перебор результатов из базы
Если из базы пришел массив строк, foreach выглядит так же
<?php foreach ($users as $user): ?>
<p>
<?php echo htmlspecialchars($user['email']); ?>
</p>
<?php endforeach; ?>
PHP не различает “обычный массив” и “результат из базы” на уровне цикла. Если данные лежат в массиве, их можно перебирать
Изменение элементов массива
Если нужно изменить элементы, можно использовать ссылку
<?php
$prices = [100, 200, 300];
foreach ($prices as &$price) {
$price = $price * 1.2;
}
unset($price);
print_r($prices);
unset($price) после цикла нужен, чтобы ссылка на последний элемент не создала странные ошибки дальше в коде. Новичкам лучше не использовать ссылки без необходимости. Часто проще создать новый массив
$newPrices = [];
foreach ($prices as $price) {
$newPrices[] = $price * 1.2;
}
Чем foreach отличается от for
for удобен, когда вы работаете с числовым счетчиком
for ($i = 0; $i < 10; $i++) {
echo $i;
}
foreach удобен, когда уже есть массив
foreach ($items as $item) {
echo $item;
}
Для списков товаров, пользователей и сообщений обычно лучше foreach, потому что вам не нужно вручную следить за индексами
Мини-практика
Создайте массив задач
$tasks = [
['title' => 'Установить PHP', 'done' => true],
['title' => 'Запустить сайт', 'done' => false],
['title' => 'Сделать форму', 'done' => false],
];
Выведите задачи в HTML-список. Если done равен true, добавьте к задаче текст готово, иначе в работе
Частые ошибки
Путают массив и строку foreach работает с массивами и объектами. Если передать строку, будет предупреждение
Используют один и тот же смысл имени переменной Пишите $products as $product, $users as $user, $messages as $message. Так код легче читать
Забывают экранировать вывод в HTML Если данные пришли от пользователя или из базы, выводите через htmlspecialchars()
Меняют массив по ссылке и не делают unset После foreach ($items as &$item) добавляйте unset($item), если дальше используете ту же переменную
Что почитать дальше по PHP
Если нужен общий маршрут по теме, откройте рубрику PHP. Для соседних задач пригодятся эти разборы:
- PHP array: массивы, индексы, добавление и foreach
- Ассоциативный массив в PHP: ключи, значения и обход
- Массивы в PHP: обычные, ассоциативные и foreach
- Многомерный массив в PHP: как обратиться к элементу



