2012-06-06 19 views
48

que provienen de fondo pitón y el tipo de datos de Python que es similar (un diccionario) es un desordenada conjunto de pares de valores clave.¿Están ordenadas las matrices asociativas de PHP?

Me pregunto si PHP matrices asociativas son desordenada? Ellos parecen ordenados.

$test = array(
    'test' => 'test', 
    'bar' => 'bar', 
); 

var_dump($test);  

var_dump(array_slice($test, 0, 1)); 

La prueba siempre viene antes que la barra y puedo cortar esta matriz como se ve. Entonces, ¿esto siempre está garantizado para ser ordenado en todas las versiones de php? ¿Es el orden solo el orden con el que he declarado la matriz? ¿Entonces algo está apuntando internamente 'test' para colocar [0] en la matriz? He leído http://php.net/manual/en/language.types.array.php pero no arroja demasiada luz sobre este tema. Aprecio tus respuestas. Ty

+6

Varias de estas respuestas se refieren al manual de PHP que indica que las matrices están ordenadas. Pero esto no responde la pregunta original en absoluto. Lo que se estaba preguntando era qué orden *** (por defecto) es ***. El orden predeterminado * aparece * para ser el orden en que se asignan los elementos, pero ¿dónde indica la documentación que podemos contar con esto de una versión a la siguiente? – flymike

Respuesta

46

matrices PHP asociativos (así como matrices numéricas) están clasificadas y PHP suministros varias funciones para hacer frente a la ordenación de los arrays como ksort(), uksort() y krsort()

Además, PHP permite declarar matrices con las teclas numéricas fuera de orden:

$a = array(3 => 'three', 1 => 'one', 2 => 'two'); 
print_r($a); 

Array 
(
    [3] => three 
    [1] => one 
    [2] => two 
) 
// Sort into numeric order 
ksort($a); 
print_r($a); 
Array 
(
    [1] => one 
    [2] => two 
    [3] => three 
) 

From the documentation:

Una matriz en PHP es en realidad un mapa ordenado. Un mapa es un tipo que asocia valores a claves. Este tipo está optimizado para varios usos diferentes; se puede tratar como una matriz, lista (vector), tabla hash (una implementación de un mapa), diccionario, colección, pila, cola y probablemente más. Como los valores de matriz pueden ser otras matrices, también son posibles árboles y matrices multidimensionales.

7

Los documentation estados:

An array in PHP is actually an ordered map. 

Así que sí, que están siempre ordenadas. Las matrices se implementan como hash table.

+1

por supuesto que leí el primer sentance pero todavía estaba confundido. Me doy cuenta de que si tengo $ test = array ('foo', 'bar') se ordena $ test [0] es foo, $ test [1] es barra. Pero cuando tengo una matriz asociativa, las claves no están ordenadas numéricamente. $ test ['test'] está ahora en primer lugar pero no está indexado numéricamente, está indexado por una cadena, es por eso que estaba confundido y publicado. – dm03514

+1

@ dm03514 No estoy seguro de que te atrape. Pero todas las matrices en PHP son en realidad matrices asociativas. Espero que ayude. – alexn

+1

esta respuesta es correcta, pero sale como innecesariamente condescendiente ... – mikegreiling

1

Desde el php manual:

Arrays están clasificadas. El orden se puede cambiar usando varias funciones de clasificación. Consulte la sección array functions para obtener más información.

He confiado en el hecho de que están ordenados y ha funcionado consistentemente en cada proyecto que he tenido.

Cuestiones relacionadas