Какой лучший способ вычислить размер одного массива в операторе for?

0

Что быстрее? есть ли причины использовать один над другим?
for($i = 0; $i < count($array); ++$i){... }
ИЛИ
for($i = 0, $size = count($array); $i < $size; ++$i){... }

http://php.net/manual/en/control-structures.for.php: "Вышеприведенный код может быть медленным, потому что размер массива выбирается на каждой итерации. Поскольку размер никогда не изменяется, цикл легко оптимизируется используя промежуточную переменную для хранения размера вместо многократного вызова count(): "

Действительно ли интерпретатор настолько тупой?

Теги:
arrays
for-loop
time-complexity
complexity-theory

1 ответ

1
Лучший ответ

В этом случае на каждой итерации вы должны вызвать функцию count(), сложность времени - O(n):

for($i = 0; $i < count($array); ++$i){ ... }

В этом случае вы вызываете один раз count() при запуске, и вы используете значение хранилища $size, сложность времени - O(1). Этот случай быстрее:

for($i = 0, $size = count($array); $i < $size; ++$i){ ... }
  • 0
    Да, но интерпретатор не кэширует значение или даже имеет специальное предложение для очень распространенного случая зацикливания любого элемента в массиве?
  • 0
    @JonathonWisnoski PHP массивы являются изменяемыми. Вполне возможно, что длина массива меняется между итерациями.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню