PHP: Массивы
Теория: Цикл for
Работа с массивами практически всегда подразумевает итерацию по его элементам. Самый простой способ выполнить ее — это циклы, которые мы изучим в этом уроке.
Как обходить массив
Для начала рассмотрим код:
В этом коде создается массив из трех элементов — имен. Далее в цикле происходит обход массива и вывод на экран всех имен. При этом каждое имя оказывается на новой строке.
Рассмотрим этот этап подробнее. Когда мы обходим массив циклом for, счетчик играет роль индекса в массиве. Он инициализируется нулем и увеличивается до count($userNames) - 1, что соответствует индексу последнего элемента.
Интересно производится печать на экран. Элемент массива может участвовать в строковой интерполяции, поэтому мы можем сразу печатать и имя и перевод строки, используя конструкцию "{$userNames[$i]}\n".
А что, если нам нужно вывести значения в обратном порядке? Для этого есть два способа. Первый способ — идти в прямом порядке от нулевого индекса до последнего и каждый раз вычислять нужный индекс по такой формуле:
Но есть и другой способ. Можно просто идти от верхней границы к нижней. В такой ситуации код меняется на следующий:
При таком обходе проверка остановки должна быть именно на >=, иначе будет пропущен элемент с индексом 0.
Изменение
Сам цикл при изменении остается тем же самым, меняется только его тело. Предположим, что мы хотим нормализовать список электронных адресов. Допустим, в нормализацию адресов входит приведение их к нижнему регистру. Тогда код будет выглядеть так:
Здесь ключевая строчка — это $emails[$i] = strtolower($emails[$i]);. В ней происходит перезапись элемента под индексом $i. Иногда полезно создать промежуточную переменную. Это упрощает анализ кода:
Инициализация цикла
При инициализации цикла for в круглых скобках располагаются три блока выражений, разделяемые символом ;.
Содержимое первого блока инициализации выполняется перед началом цикла и только один раз.
Второй блок определяет условие выполнения цикла и содержит выражение, которое вычисляется перед каждой очередной итерацией. Работа цикла продолжается, если это выражение возвращает true. Если же проверка оказывается ложной, цикл заканчивает свою работу.
В третьем блоке содержатся выражения, которые обрабатываются в конце итерации цикла. Обычно здесь происходит необходимое преобразование счетчика — например, инкремент:
В процессе работы цикла мы заново вычисляем выражение, которое содержится в блоке условий. Это значит, что в нашем примере длина массива count($colors) будет вычисляться вновь и вновь при каждом проходе цикла. Сам массив остается неизменным, поэтому повторное вычисление размера оказывается избыточным. Повторения операции можно избежать, если определить переменную за пределами цикла и присвоить ей необходимое значение:
Но существует более оптимальное решение: описать несколько выражений в блоке инициализации цикла for и разделить их запятыми. Это позволяет избегать лишних вычислений. В нашем примере мы можем единожды определить значение length. Также мы сразу увидим переменные, которые используются только внутри цикла:
Еще рассмотрим пример использования нескольких выражений в блоке изменения счетчика:
Рассмотренные блоки могут быть пустыми, при этом в них сохранятся разделители ;. Это допустимо, но так лучше не делать: в идеале все блоки должны быть полными и содержать понятное описание работы цикла.
.png)
