W3docs

Циклы в PHP: понимание цикла Foreach

Цикл foreach — мощный инструмент PHP для перебора массивов и объектов. Узнайте синтаксис, работу с ключами и значениями, вложенные циклы и типичные ошибки.

Цикл foreach — наиболее удобный способ перебора массивов и объектов в PHP. В отличие от цикла for, он не требует счётчика и вычисления длины — он просто последовательно проходит по каждому элементу. В этом руководстве рассматриваются синтаксис, чтение ключей и значений, изменение элементов по ссылке, вложенные циклы и типичные ошибки, с которыми сталкиваются начинающие.

Что такое цикл Foreach?

Цикл foreach разработан специально для массивов и объектов. Он обходит коллекцию и передаёт каждый элемент по одному, поэтому вам не нужно управлять индексной переменной или беспокоиться о выходе за границы. Это делает его идеальным для индексированных массивов, ассоциативных массивов и итерируемых объектов.

Он существует в двух формах:

  • foreach ($array as $value) — когда нужно только каждое значение.
  • foreach ($array as $key => $value) — когда нужен также каждый ключ.

Если вам нужен счётчик, шаг, отличный от 1, или фиксированное количество итераций, не привязанное к массиву, используйте цикл for или while. Смотрите Циклы в PHP для обзора всех типов циклов.

Синтаксис цикла Foreach

Синтаксис цикла foreach прост и понятен. Он состоит из ключевого слова foreach, за которым следуют круглые скобки, определяющие массив или object для перебора. Внутри скобок вы определяете переменную, которая будет хранить значение каждого элемента по мере итерации.

Пример синтаксиса цикла foreach:

Синтаксис цикла Foreach в PHP

foreach ($array as $value) {
    // code to be executed for each element
}

В этом примере $array — массив или object для перебора, а $value — переменная, хранящая значение каждого элемента при итерации.

Для ассоциативных массивов или объектов, где нужны и ключ, и значение, используется оператор =>:

foreach ($array as $key => $value) {
    // code to be executed for each element
}

Перебор с ключами и значениями

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

<?php

$capitals = array(
    "France"  => "Paris",
    "Japan"   => "Tokyo",
    "Egypt"   => "Cairo"
);

foreach ($capitals as $country => $city) {
    echo "The capital of $country is $city.\n";
}

Результат:

The capital of France is Paris.
The capital of Japan is Tokyo.
The capital of Egypt is Cairo.

Изменение элементов массива по ссылке

По умолчанию foreach копирует каждое значение, поэтому присваивание переменной цикла не изменяет исходный массив. Добавьте & перед значением, чтобы перебирать по ссылке и изменять элементы на месте:

<?php

$prices = array(10, 20, 30);

foreach ($prices as &$price) {
    $price *= 2;          // changes the real array element
}
unset($price);             // important: break the reference

print_r($prices);

Результат:

Array
(
    [0] => 20
    [1] => 40
    [2] => 60
)

Внимание: всегда вызывайте unset($price) после цикла с перебором по ссылке. Переменная продолжает указывать на последний элемент, и её повторное использование в следующем цикле незаметно повредит данные — одна из самых распространённых ошибок в PHP.

Использование цикла Foreach

Цикл foreach используется для обхода массивов и объектов. Он позволяет обращаться к каждому элементу массива или object поочерёдно и выполнять определённое действие для каждого элемента. Например, можно использовать цикл foreach для вывода всех элементов массива или выполнения вычислений для каждого элемента объекта.

Пример использования цикла foreach в PHP:

Использование цикла Foreach в PHP

php— editable, runs on the server

В этом примере мы создали массив цветов и использовали цикл foreach для вывода каждого цвета. Цикл перебирает элементы массива $colors, и на каждой итерации значение текущего элемента присваивается переменной $color.

Примеры цикла Foreach

Цикл foreach — гибкий инструмент, который можно использовать по-разному. Вот несколько примеров применения цикла foreach в PHP-коде:

  • Вывод элементов массива:

PHP: вывод элементов массива с помощью цикла foreach

php— editable, runs on the server
  • Вычисление суммы элементов массива:

PHP: вычисление суммы массива с помощью цикла foreach

php— editable, runs on the server
  • Доступ к свойствам объекта:

PHP: доступ к свойствам объекта в цикле foreach

<?php

class Person {
    public $name;
    public $age;

    public function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
}

$people = array(
    new Person("John", 25),
    new Person("Jane", 30),
    new Person("Jim", 35)
);

foreach ($people as $person) {
    echo "Name: " . $person->name . ", Age: " . $person->age . "<br>";
}

?>

В этом примере мы создали класс Person с двумя свойствами: name и age. Затем создали массив объектов Person и использовали цикл foreach для доступа к свойствам каждого объекта. Цикл перебирает элементы массива $people, и на каждой итерации значение текущего объекта Person присваивается переменной $person. Для доступа к свойствам объекта Person используется оператор ->.

Вложенные циклы Foreach

Для работы с многомерным массивом вложите один foreach внутрь другого. Внешний цикл перебирает строки, а внутренний — столбцы каждой строки:

<?php

$matrix = array(
    array(1, 2, 3),
    array(4, 5, 6)
);

foreach ($matrix as $row) {
    foreach ($row as $cell) {
        echo $cell . " ";
    }
    echo "\n";   // new line after each row
}

Результат:

1 2 3
4 5 6

Управление циклом с помощью break и continue

Внутри foreach можно использовать break для досрочного завершения цикла и continue для перехода к следующему элементу:

<?php

$numbers = array(1, 2, 3, 4, 5, 6);

foreach ($numbers as $number) {
    if ($number % 2 !== 0) {
        continue;        // skip odd numbers
    }
    if ($number > 4) {
        break;           // stop once we pass 4
    }
    echo $number . " ";
}

Результат:

2 4

Нечётные числа 1, 3 и 5 пропускаются с помощью continue; 2 и 4 выводятся; когда цикл достигает чётного числа 6 (больше 4), break полностью останавливает его.

Заключение

Цикл foreach — незаменимый инструмент для PHP-разработчиков. Он обеспечивает удобный и простой способ перебора массивов и объектов, позволяя обращаться к каждому элементу и выполнять над ним нужные действия. Будь то вывод элементов массива, вычисление сумм или доступ к свойствам объектов — цикл foreach является универсальным инструментом, применимым в самых разных ситуациях.

Попробуйте использовать цикл foreach в своём PHP-коде уже сегодня и убедитесь, как он упрощает и ускоряет процесс разработки.

Практика

Практика
Что делает цикл 'foreach' в PHP?
Что делает цикл 'foreach' в PHP?
Was this page helpful?