Foreach в PHP: как перебрать массив и не запутаться в ключах

Короткий ответ: 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. Для соседних задач пригодятся эти разборы:

Оцените статью
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x