2009-06-04 15 views
8

Cuando realizo un ciclo foreach sobre una matriz asociatve en php, el orden en que se realiza es el orden en que se define.¿El orden de una matriz asociativa está garantizado en PHP?

Por ejemplo:

$arr = array("z" => "z", "a" => "a", "b" => "b"); 

foreach($arr as $key => val) 
    print("$key: $val\n"); 

Salidas:

z: z 
a: a 
b: b 

Considerando

$arr = array("a" => "a", "b" => "b", "z" => "z"); 

Salidas:

a: a 
b: b 
z: z 

Entonces mi pregunta es: ¿este comportamiento se define en un nivel de especificación? ¿Puedo tener una certeza razonable de que este comportamiento no cambiará en versiones futuras de PHP?

Respuesta

16

Desde el PHP Manual

una matriz en PHP es en realidad una ordenada mapa. Un mapa es un tipo que asocia los valores a las claves. Este tipo está optimizado para varios usos diferentes; puede ser tratado como una matriz, lista (vector), tabla hash (una implementación de un mapa ), diccionario, colección, pila, cola , y probablemente más.

y

Arrays están clasificadas. El orden puede ser cambiado usando varias funciones de clasificación .

Por lo tanto, puede estar seguro (al menos actualmente) de que se mantendrá el pedido. Me sorprendería mucho si este comportamiento cambiara porque está claramente establecido y debido a esto habrá una gran cantidad de código que depende de él.

+0

+1 Una cotización vale más que mil palabras. ;) – Gumbo

+0

¡Gracias! Por alguna razón, pasé por alto eso, probablemente cuando aún pensaba que no se aplicaba a las matrices asociativas. – Asuah

0

Esto nunca cambiará.

+1

Esos no son los cambios que está buscando. * hace una ola de mano Jedi * –

0

Porque las matrices siempre están ordenadas, y la forma más fácil y rápida de iterar la matriz va del primer elemento al último (por lo que no hay una buena razón para cambiar el comportamiento de foreach()), puede estar razonablemente seguro de que este comportamiento no cambiará.

0

Parece que sus preguntas provienen de la programación en Perl, donde no se garantiza que las "matrices" estén en el orden en que las creó. Pero en PHP siempre ha sido ordenado y siempre lo será, de lo contrario, se romperá una gran cantidad de código.

Cuestiones relacionadas