Цикл foreach в PHP
Всем привет! В прошлом уроке мы с вами изучили основы массивов в PHP. Как вы уже поняли, массив может иметь довольно много элементов, и каждый из этих элементов, в свою очередь, также может являться массивом. Само собой, напрашивается вопрос: «А можно ли как-то автоматизировать обход по массиву?». То есть обращаться к его элементам по одному, не указывая при этом индексы значений. Ответ – можно. Для этого в PHP есть такая замечательная вещь, как циклы.
Давайте рассмотрим следующий пример:
Пусть по трассе едут 3 машины. Сделаем массив, в котором будут содержаться значения скоростей движения этих авто.
$carsSpeeds = [
95,
140,
78
];
И допустим, нам нужно вычислить среднюю скорость движения этих автомобилей. Разумеется, зная, что автомобилей 3, мы могли бы сделать это с помощью выражения:
$averageSpeed = ($carsSpeeds[0] + $carsSpeeds[1] + $carsSpeeds[2]) / 3;
Простейшая школьная математика. Однако, если представить, что таких значений в массиве будет хотя бы 10, это уже приведёт к значительному разрастанию выражения. На помощь нам приходят циклы в PHP.
Рассмотрим в первую очередь языковую конструкцию foreach (от английского for – для, each - каждый). Она позволяет пройтись по каждому элементу массива. Она просто проходит по каждому элементу массива по очереди и позволяет выполнить с ним какое-либо действие.
Использование конструкции выглядит следующим образом:
foreach ($array as $index => $value) {
...
}
где $array – это массив, $index и $value – это индекс и значение элемента на текущем шаге соответственно. Они на каждом новом элементе просто изменяют свои значения. Переменные $index и $value определяются прямо здесь, их раньше могло не существовать, они определяются прямо в процессе обхода массива.
То, что находится внутри фигурных скобок будет повторяться для каждого элемента массива. Один такой проход называется шагом или итерацией. Один элемент = одна итерация. Запомните это слово.
Цикл будет идти по массиву, пока не закончатся все элементы. Затем программа продолжит своё выполнение.
Давайте в качестве примера со скоростями обойдём массив и просто выведем индексы массива и его значения.
<?php
$carsSpeeds = [
95,
140,
78
];
foreach ($carsSpeeds as $index => $speed) {
echo $index . ' ' . $speed . '<br>';
}
Результат:
0 95
1 140
2 78
Как мы видим, на первом шаге цикла в переменные $index и $speed попали значения 0 и 95 соответственно. На втором – 1 и 140 и так далее. Всё как мы и ожидали. Было выполнено 3 итерации.
Если нам не нужны индексы массива, то их можно не указывать в этой конструкции:
foreach ($array as $value) {
...
}
Такую конструкцию мы будем использовать, когда нам вообще нет дела до индексов и нужны только значения.
Вернёмся к задаче
Итак, нам нужно найти среднюю скорость. Для этого нам нужно:
- сложить все значения скоростей
- поделить получившуюся сумму на кол-во значений
Для того, чтобы выполнить первый шаг, давайте прибегнем к помощи цикла foreach:
<?php
$carsSpeeds = [
95,
140,
78
];
$sumOfSpeeds = 0;
foreach ($carsSpeeds as $speed) {
$sumOfSpeeds += $speed;
}
echo $sumOfSpeeds;
Перед началом цикла определили переменную $sumOfSpeeds равную 0, а затем на каждой итерации прибавляли к ней значения скоростей. В конце просто вывели получившийся результат, который равен 313. Можете проверить на калькуляторе.
Теперь нужно разделить получившееся значение на число элементов.
Чтобы узнать число элементов в массиве можно прибегнуть к функции count($carSpeeds) – на вход передаётся имя массива. Полностью наш код будет выглядеть следующим образом:
<?php
$carsSpeeds = [
95,
140,
78
];
$sumOfSpeeds = 0;
foreach ($carsSpeeds as $speed) {
$sumOfSpeeds += $speed;
}
$countOfCars = count($carsSpeeds);
$averageSpeed = $sumOfSpeeds / $countOfCars;
echo 'Средняя скорость движения по трассе: ' . $averageSpeed;
На этом всё. Всем пока!

Комментарии