2011-03-16 15 views
8

Al empujar un nuevo valor en una matriz indexada¿Cómo hace PHP para rastrear el orden en una matriz asociativa?

$array[] = 'new value'; 

la documentación de PHP explica la forma en que se agrega en la posición [MAX_INDEX + 1].

Al empujar un nuevo valor en una matriz asociativa

$array['key'] = 'new value'; 

funciona de la misma, pero no veo ninguna explicación en la documentación para confirmar cómo o por qué lo hace. El orden parece ser consistente en mi implementación, pero ¿cómo puedo estar seguro de que el pedido seguirá siendo el mismo? ¿Alguien sabe cómo PHP implementa esto en el back-end?

+2

Creo que los detalles de implementación se encuentran en [zend_hash.c] (http://svn.php.net/viewvc/php/php -src/trunk/Zend/zend_hash.c? view = marcado). Los índices se mantienen separados, supongo, y '-> pInternoPointer' muestra el último. – mario

+1

Probablemente solo sean Linked Hash Maps. El enlace proporciona el orden independientemente del hash. –

+0

¡Excelentes respuestas! ¡Justo lo que estaba buscando! :-) –

Respuesta

0

How are associative arrays implemented in PHP? podría darle alguna idea.

Parece que las matrices PHP son esencialmente tablas hash, por lo que el orden de la matriz se mantendrá igual hasta que lo reordene (por ejemplo, al ordenar la matriz).

EDIT: parece que esto se está downvoted, permítaseme incluir explícitamente las fuentes que hay enlaces en el comentario anterior aquí ...

+6

Perdón por la nigromancia, pero esta respuesta no tiene sentido. Si fuera una tabla hash simple, el orden de las entradas debería basarse en el valor hash de cada clave, no en la secuencia de inserciones. De hecho, así es como se comportan las tablas hash en cualquier otro idioma. Y, sin embargo, las matrices asociativas PHP parecen hacer un seguimiento de la secuencia de inserciones. Entonces la pregunta aún está abierta para mí. ¿Como hace eso? ¿Se puede confiar en eso? – Tobia

+0

http://stackoverflow.com/questions/2350361/how-is-the-php-array-implemented-on-the-c-level – n00dle

+0

http://nikic.github.io/2012/03/28/Comprender -PHPs-internal-array-implementation.html – n00dle

2

MAX_INDEX en realidad no tiene nada que ver con el pedido.
que puede hacer

$array[5] = 'new value'; 
$array[1] = 'new value'; 
$array[105] = 'new value'; 
$array[2] = 'new value'; 

y la matriz mantendrá ese orden también.

PHP array es un mapa ordenado, por lo tanto, es un mapa que mantiene su orden.
los elementos de la matriz simplemente mantienen el orden desde que se agregaron (o fue modificado completamente por alguna función de manipulación de matriz).
eso es todo.

0

Prefiero confiar en ksort. En mi experiencia, las matrices se mantienen consistentes hasta que comiences a eliminar elementos. Mejor ordenarlos manualmente y saber que están en el orden que quieres.

+0

¿Qué pasa con la eliminación de elementos? –

+0

Recuerdo que tuve problemas para eliminar elementos y ordenar las matrices.Probablemente solo una mala programación de mi parte, pero me llevó a mi hábito de siempre definir el orden de la matriz si confío en ella. – Ryre

Cuestiones relacionadas