<MyRusakov.ru />

Профессиональная Web-разработка. Дизайн, код и автоматизация

Профессиональная Web-разработка. Дизайн, код и автоматизация

Это очень подробный курс из разряда "всё включено". Разбираются следующие темы: HTML, CSS, SCSS, JavaScript, PHP, SQL, Laravel, Nginx, PostCSS, npm, Vite, Vitest, Composer, PHPUnit, Prettier, Stylelint, ESLint, Pint, Larastan, Git, Agile, Scrum, Docker, Supervisord, Figma, Stitch AI, Confluence, Jira.

Рассчитан и на новичков, и на тех, кто уже знаком с основами, но хочет освоить полный цикл разработки.

Помимо самой теории, Вы увидите пример создания Web-проекта на 20 000 строк кода: от идеи и документации на Confluence через планирование на Jira, fullstack-разработку до деплоя на VPS.

Помимо уроков, курс содержит упражнения для закрепления знаний и финальное тестирование. А ещё Вы получите 5 полноценных Бонусных курсов: «GitLab под ключ», «Вёрстка сайта с нуля 2.0», «JavaScript с Нуля до Гуру 2.0», «PHP и MySQL с Нуля до Гуру 3.0» и «Laravel от А до Я».

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

foreach в PHP: как правильно перебирать массивы, ключи и значения

foreach в PHP: как правильно перебирать массивы, ключи и значения

foreach в PHP — самый удобный способ перебора массивов. Если вы получаете список товаров из базы, массив ошибок формы, настройки пользователя или строки CSV-файла, почти наверняка вам понадобится именно этот цикл. В этой статье разберём синтаксис foreach, работу с ключами и значениями, изменение элементов, вложенные массивы и частые ошибки.

Базовый синтаксис foreach в PHP

Самый простой вариант — пройтись по массиву и получить каждое значение:

<?php
$names = ['Анна', 'Иван', 'Мария'];

foreach ($names as $name) {
    echo $name . '<br>';
}

Переменная $name на каждой итерации получает очередной элемент массива. Важно: имя переменной вы выбираете сами, но лучше делать его осмысленным. Для массива $users логично использовать $user, для $products$product.

Как получить ключ и значение

Часто нужно знать не только значение, но и ключ элемента. Например, в ассоциативном массиве ключами могут быть названия настроек:

<?php
$user = [
    'name' => 'Олег',
    'email' => 'oleg@example.com',
    'role' => 'admin'
];

foreach ($user as $key => $value) {
    echo $key . ': ' . $value . '<br>';
}

Конструкция $key => $value означает: в $key попадёт ключ текущего элемента, а в $value — его значение.

foreach для вывода HTML-списка

Один из частых практических сценариев — вывести данные на страницу:

<?php
$products = [
    ['title' => 'Клавиатура', 'price' => 2500],
    ['title' => 'Мышь', 'price' => 1200],
    ['title' => 'Монитор', 'price' => 18000]
];
?>

<ul>
    <?php foreach ($products as $product): ?>
        <li>
            <strong><?= htmlspecialchars($product['title']) ?></strong> —
            <?= (int) $product['price'] ?> руб.
        </li>
    <?php endforeach; ?>
</ul>

Для шаблонов удобно использовать альтернативный синтаксис foreach ... endforeach. Он делает HTML более читаемым. Обратите внимание на htmlspecialchars(): если данные приходят от пользователя или из базы, их нужно экранировать перед выводом.

Изменение элементов массива в foreach

По умолчанию foreach передаёт значение в переменную-копию. Поэтому такой код не изменит исходный массив:

<?php
$prices = [100, 200, 300];

foreach ($prices as $price) {
    $price = $price * 1.2;
}

print_r($prices); // [100, 200, 300]

Чтобы изменить элементы, можно использовать ключ:

<?php
$prices = [100, 200, 300];

foreach ($prices as $index => $price) {
    $prices[$index] = $price * 1.2;
}

print_r($prices); // [120, 240, 360]

Это самый понятный и безопасный способ для новичков.

Изменение по ссылке: осторожно

В PHP можно перебирать массив по ссылке, добавив & перед переменной значения:

<?php
$numbers = [1, 2, 3];

foreach ($numbers as &$number) {
    $number *= 10;
}
unset($number);

print_r($numbers); // [10, 20, 30]

После такого цикла обязательно вызывайте unset($number). Иначе переменная останется ссылкой на последний элемент массива, что может привести к странным ошибкам в следующем foreach.

continue и break внутри foreach

Как и в других циклах, внутри foreach можно пропускать итерации или полностью останавливать перебор:

<?php
$users = [
    ['name' => 'Анна', 'active' => true],
    ['name' => 'Игорь', 'active' => false],
    ['name' => 'Мария', 'active' => true]
];

foreach ($users as $user) {
    if (!$user['active']) {
        continue;
    }

    echo $user['name'] . '<br>';
}

continue пропускает неактивного пользователя, а break можно использовать, если нужный элемент уже найден:

<?php
$targetEmail = 'maria@example.com';
$foundUser = null;

foreach ($users as $user) {
    if (($user['email'] ?? null) === $targetEmail) {
        $foundUser = $user;
        break;
    }
}

Вложенный foreach для многомерных массивов

Если внутри массива лежат другие массивы, используйте вложенный цикл:

<?php
$orders = [
    101 => ['Ноутбук', 'Сумка'],
    102 => ['Телефон', 'Чехол', 'Кабель']
];

foreach ($orders as $orderId => $items) {
    echo 'Заказ №' . $orderId . '<br>';

    foreach ($items as $item) {
        echo '- ' . $item . '<br>';
    }
}

Главное правило — не называйте переменные одинаково во внешнем и внутреннем цикле. Это ухудшает читаемость и может привести к ошибкам.

Типичные ошибки при использовании foreach

  • Ожидать изменения массива без ссылки или ключа. Обычный foreach работает с копией значения.
  • Забывать unset() после перебора по ссылке. Это частая причина трудноуловимых багов.
  • Не проверять структуру данных. Если ключа нет, используйте оператор ??.
  • Выводить данные без экранирования. Для HTML используйте htmlspecialchars().

foreach или for: что выбрать?

Для обычного перебора массива почти всегда выбирайте foreach. Он короче, понятнее и не требует вручную работать с индексами. Цикл for полезен, когда нужен строгий контроль счётчика: например, пройти только первые 10 элементов или двигаться с определённым шагом.

Мини-чеклист хорошего foreach

  • Используйте понятные имена: $users as $user, $orders as $order.
  • Если нужен ключ, пишите $key => $value.
  • Для изменения массива новичкам чаще лучше использовать ключ, а не ссылку.
  • Перед выводом в HTML экранируйте строки.
  • Не усложняйте вложенность: если внутри 3-4 foreach подряд, возможно, код стоит вынести в функцию.

Если вы хотите не просто запомнить синтаксис, а уверенно применять циклы, массивы, формы, базы данных и авторизацию в реальных проектах, посмотрите курс PHP и MySQL с нуля до уровня самостоятельной разработки — он хорошо дополняет такие базовые темы практикой.

Итог

foreach в PHP — основной инструмент для работы с массивами. Запомните три формы: перебор значений, перебор ключей и значений, а также изменение элементов через ключ или ссылку. Если писать имена переменных осмысленно, экранировать вывод и аккуратно обращаться со ссылками, foreach сделает код проще и надёжнее.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (https://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: https://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: https://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.