Вопрос про перебор массива в php

214
01 февраля 2018, 19:17

Вопрос:

Есть массив a = array(тут много элементов). Проходим по массиву циклом for (i=0; i<=count(a); i++). Можно ли как-нибудь ускорить цикл?

Ответ:

1) Вынести count(a) в отдельную переменную

2) Считать массив с конца циклом for (i=count(a); i>=0; i--)

  1. Мне кажется или в условии ошибка и при <= count (больше или равно) цикл будет выполняться вечно?
  2. Почему если бежать по массиву с конца будет быстрее?
Answer 1

Мне кажется или в условии ошибка и при <= count (больше или равно) цикл будет выполняться вечно?

во первых меньше или равно, во вторых цикл не будет вечным, так как i у вас все же увеличивается каждую итерацию и так или иначе условие выполнится. Единственная проблема тут, что он выполнится на 1 раз больше, чем надо с доступом к лишнему элементу.

Почему если бежать по массиву с конца будет быстрее?

Формально не важно с какой стороны проходить массива с начала или с конца. Вопрос в проверке условия. Условие i <= count выполняется на каждой итерации, то есть функция count выполняется каждый раз. В случае прохода с конца, count выполняется единожды для присваивания начального значения i. В случае если вынести len = count(a) перед циклом, и написать условие i < len то скорость будет одинакова.

READ ALSO
Как изменить js скрипт wordpress плагина?

Как изменить js скрипт wordpress плагина?

Использую плагин Strong Testimonial, нужно немного изменить функционал js скрипта, как это правильно сделать, что бы и после обновления плагина все...

230
Как сделать проверку товара в каталоге?

Как сделать проверку товара в каталоге?

В данный момент есть категория "Номер 1" в нее входят подкатегории "Номер 11" "Номер 1

278
Коннект к websocket php

Коннект к websocket php

Добрый деньТакая проблема

204
PHP архитектура Dependency Injection

PHP архитектура Dependency Injection

Сравнительно недавно пишу в ООП нотации, изучаю Ларавел, пытаюсь разобраться с DIТак же есть надобность написать Бота, который сможет отвечать...

191