Я занимаюсь сертификацией Zend PHP.
Не уверен ответ на этот вопрос.
Вопрос. Каков наилучший способ итерации и изменения каждого элемента массива с помощью PHP 5?
- PHP foreach () с массивами внутри массивов?
- Многомерная итерация массива
- Сделать большую работу по обработке меньше
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++) { }
Из этих вариантов C будет очевидным ответом.
Остальные параметры (помимо A) могут быть использованы для достижения этого, в зависимости от кода внутри скобки, но вопрос НЕ показывает этот код. Так что это должно быть C.
И вы отвечаете на неправильный вопрос – да, делайте count (), прежде чем цикл for улучшит производительность, но этот вопрос касается не производительности.
Вы можете повторять и изменять каждый элемент массива с помощью любой из показанных конструкций. Но некоторые замечания по этому поводу:
b) Полезно только, если массив представляет собой числовой массив с ключами от 0 до n-1.
c) Полезен для обоих типов массивов. Кроме того, $value
является ссылкой на значение элемента. Поэтому изменение $value
внутри foreach
также изменит исходное значение.
d) Как и c) кроме $value
– это копия значения (обратите внимание, что foreach
работает с копией $array
). Но с ключом элемента вы можете получить доступ и изменить исходное значение с помощью $array[$key]
.
д) Как и г). Используйте $array[$key]
для доступа и изменения исходного элемента.
SPL был бы лучшим ответом здесь.