Подтвердить что ты не робот

Самый быстрый способ итерации массива в 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++) { }
4b9b3361

Ответ 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 будет лучшим ответом здесь.