2009-10-20 13 views
23

Estoy estudiando para obtener la certificación PHP de Zend.La forma más rápida de iterar array en PHP

No estoy seguro de la respuesta a esta pregunta.

Pregunta: ¿Cuál es la mejor manera de iterar y modificar cada elemento de una matriz con PHP 5?

a) no se puede modificar una matriz durante la iteración

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)) { /* ... */ }


Mi instinto es (B) ya que no hay necesidad de crear una variable temporal, entonces me doy cuenta de que no funcionará para las matrices asociativas. La búsqueda adicional alrededor de la red encontró esto: El almacenamiento del recuento de matriz invariante en una variable separada mejora el rendimiento.

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

Respuesta

20

De estas opciones C sería la respuesta obvia.

Las opciones restantes (además de A) pueden usarse para lograr eso, dependiendo del código entre paréntesis, pero la pregunta NO muestra ese código. Entonces debe ser C.

Y está respondiendo la pregunta incorrecta - sí, haciendo count() antes de que el ciclo mejore el rendimiento, pero esta pregunta no es sobre el rendimiento.

+0

La parte "usar PHP' 5' "también puede ser una pista. b), d), e) son posibles en php4 pero c) no lo es.De acuerdo, esa es una evidencia débil, pero la pregunta del examen a menudo funciona de esa manera ;-) Ya que necesita otra tabla de consulta para acceder al elemento para b, d, e parece obvio que c) es "la mejor" manera (dadas las opciones). El manual también indica que esto no funciona con 'foreach (array (1,2,3) as & $ v)', el traversable debe ser una variable. – VolkerK

3

SPL sería la mejor respuesta aquí.

+0

+1, incluso es solo "la mitad de la solución" –

+0

SPL no resuelve la pregunta. Incluso si estuviese disponible como respuesta, estamos hablando de bucle, no del bucle de Traversable. –

10

Puede iterar y modificar cada elemento de una matriz con cualquiera de las construcciones que se muestran. Pero algunas notas sobre eso:

b) Solo es útil si la matriz es una matriz numérica con las teclas de 0 a n-1.

c) Es útil para ambos tipos de matrices. Además, $value es una referencia del valor del elemento. Cambiando así el $value dentro de foreach también cambiará el valor original.

d) Como c) excepto $value es una copia del valor (tenga en cuenta que foreach funciona en una copia de $array). Pero con la tecla del elemento puede acceder y cambiar el valor original con $array[$key].

e) Me gusta d). Use $array[$key] para acceder y cambiar el elemento original.

+1

explicación increíble. Lástima que solo puedo dar una vuelta – rinchik

Cuestiones relacionadas