Пусть дан некоторый массив, например, такой:
<?php
$arr = [1, 2, 3, 4, 5];
?>
Давайте выведем элементы этого массива на
экран, используя обычный цикл for
:
<?php
$arr = [1, 2, 3, 4, 5];
$length = count($arr);
for ($i = 0; $i < $length; $i++) {
echo $arr[$i];
}
?>
А теперь давайте переделаем наш код так, чтобы выводились не текущие элементы, а предыдущие:
<?php
$arr = [1, 2, 3, 4, 5];
$length = count($arr);
for ($i = 0; $i < $length; $i++) {
echo $arr[$i - 1];
}
?>
Как вы видите, для решения задачи мы просто
отнимаем от счетчика число 1
, тем
самым получая ключ предыдущего элемента.
Здесь, однако, кроется проблема: в самом
начале цикла значение счетчика будет равно
нулю и мы попытаемся получить элемент массива
с ключом -1
. Такого элемента, конечно
же, нет, и в результате мы на экране увидим
warning (при включенном выводе ошибок).
В общем-то, это логично просто геометрически:
самый первый элемент массива не имеет предыдущего.
Говоря другими словами, в нашем массиве 5
элементов, но только 4
из них имеют
предыдущий элемент.
То есть предыдущих элементов всегда на 1
меньше, чем элементов в массиве. Логично
в таком случае, что и цикл должен сделать
на одну итерацию меньше. Поэтому просто начнем
цикл с 1
, а не с 0
, и проблема
будет решена:
<?php
$arr = [1, 2, 3, 4, 5];
$length = count($arr);
for ($i = 1; $i < $length; $i++) {
echo $arr[$i - 1];
}
?>
Понятно, что просто тупо выводить предыдущие элементы - бестолковая операция. Давайте сделаем что-нибудь более осмысленное. К примеру, найдем сумму предыдущего и текущего элементов массива и выведем их на экран:
<?php
$arr = [1, 2, 3, 4, 5];
$length = count($arr);
for ($i = 1; $i < $length; $i++) {
echo $arr[$i - 1] + $arr[$i];
}
?>
Дан массив с числами. Переберите его циклом и в каждой итерации цикла выведите следующий элемент массива.
Модифицируйте предыдущую задачу так, чтобы в каждой итерации цикла выводилась сумма текущего и следующего элемента массива.
Дан массив с числами. Переберите его циклом и в каждой итерации цикла выведите два предыдущих элемента массива.
Модифицируйте предыдущую задачу так, чтобы в каждой итерации цикла выводилась сумма двух предыдущих элементов и текущего элемента массива.
Дан массив с числами. Переберите его циклом и в каждой итерации цикла выведите сумму предыдущего, текущего и следующего элементов массива.