Цикл for для массивов в PHP

Пусть у нас дан вот такой массив:

<?php $arr = [1, 2, 3, 4, 5]; ?>

Давайте переберем этот массив циклом foreach:

<?php $arr = [1, 2, 3, 4, 5]; foreach ($arr as $elem) { echo $elem; } ?>

На самом деле элементы массива можно перебрать и обычным циклом for. Такое нужно редко, но иногда бывает полезно. Давайте выполним такой перебор:

<?php $arr = [1, 2, 3, 4, 5]; $length = count($arr); for ($i = 0; $i < $length; $i++) { echo $arr[$i]; } ?>

Дан массив:

<?php $arr = ['a', 'b', 'c', 'd', 'e']; ?>

С помощью цикла for выведите все эти элементы на экран.

Применение

Выведем на экран все элементы массива, кроме нулевого. Для этого начнем счетчик цикла не с нуля, а с единицы:

<?php $arr = [1, 2, 3, 4, 5]; $length = count($arr); for ($i = 1; $i < $length; $i++) { echo $arr[$i]; } ?>

Дан массив:

<?php $arr = ['a', 'b', 'c', 'd', 'e']; ?>

С помощью цикла for выведите на экран все элементы этого массива, кроме последнего.

Дан массив:

<?php $arr = [1, 2, 3, 4, 5, 6, 7, 8]; ?>

С помощью цикла for выведите на экран первую половину элементов этого массива.

Распространенная ошибка

В следующем коде подсчет элементов массива вынесен в условие цикла:

<?php $arr = [1, 2, 3, 4, 5]; for ($i = 1; $i < count($arr); $i++) { echo $arr[$i]; } ?>

На первый взгляд кажется, что этот код лучше, так как мы избавились от лишней переменной $length. На самом деле это не так. Дело в том, что в приведенном коде функция count будет заново подсчитывать количество элементов массива каждую интерацию цикла. Это не оптимально.

В следующем коде некоторый программист находит сумму всех элементов массива, кроме нулевого:

<?php $arr = [1, 2, 3, 4, 5, 6, 7, 8]; $sum = 0; for ($i = 1; $i < count($arr); $i++) { $sum += $arr[$i]; } echo $sum; ?>

Что не так с этим кодом? Исправьте ошибку автора кода.