Самый быстрый способ итерации массива в PHP

Я занимаюсь сертификацией Zend PHP.

Не уверен ответ на этот вопрос.

Вопрос. Каков наилучший способ итерации и изменения каждого элемента массива с помощью PHP 5?

a) Вы не можете изменять массив во время итерации

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

c) foreach($array as $key => &$val) { /* ... */ }

d) foreach($array as $key => $val) { /* ... */ }

e) while(list($key, $val) = each($array)) { /* ... */ }


Моей инстинктивной является (B), так как нет необходимости создавать временную переменную, тогда я понимаю, что она не будет работать для ассоциативных массивов. Дальнейший поиск по сети нашел это: сохранение инвариантного массива в отдельной переменной повышает производительность.

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

Solutions Collecting From Web of "Самый быстрый способ итерации массива в PHP"

Из этих вариантов C будет очевидным ответом.

Остальные параметры (помимо A) могут быть использованы для достижения этого, в зависимости от кода внутри скобки, но вопрос НЕ показывает этот код. Так что это должно быть C.

И вы отвечаете на неправильный вопрос – да, делайте count (), прежде чем цикл for улучшит производительность, но этот вопрос касается не производительности.

Вы можете повторять и изменять каждый элемент массива с помощью любой из показанных конструкций. Но некоторые замечания по этому поводу:

b) Полезно только, если массив представляет собой числовой массив с ключами от 0 до n-1.

c) Полезен для обоих типов массивов. Кроме того, $value является ссылкой на значение элемента. Поэтому изменение $value внутри foreach также изменит исходное значение.

d) Как и c) кроме $value – это копия значения (обратите внимание, что foreach работает с копией $array ). Но с ключом элемента вы можете получить доступ и изменить исходное значение с помощью $array[$key] .

д) Как и г). Используйте $array[$key] для доступа и изменения исходного элемента.

SPL был бы лучшим ответом здесь.