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