¿Alguien puede explicar cómo PHP implementa arrays asociativos? ¿Qué estructura de datos subyacente usa PHP? PHP hash la clave y la almacena en algún tipo de hash map? Tengo curiosidad porque me preguntaba cuál era el rendimiento de las matrices asociativas al insertar y buscar claves.¿Cómo se implementan las matrices asociativas en PHP?
Respuesta
Bueno, por lo que vale, todos Los arreglos PHP son matrices asociativas.
Es todas las tablas hash, de acuerdo con fuentes en diversos foros de la red: http://www.usenet-forums.com/php-language/15348-zend-engine-array-implementation.html
Si usted quiere estar seguro, leer la fuente, a continuación, compilar, pero asegúrese de que puede trust your compiler (Advertencia: PDF, y sin relación, pero muy bueno).
El enlace está roto. –
@EBGreen es correcto.
Lo que le ofrece algunos problemas de rendimiento interesantes, especialmente cuando trata una matriz como una lista y utiliza el operador [] (array add). PHP no parece almacenar en caché la clave numérica más grande y agregarle una, sino que parece recorrer todas las teclas para encontrar cuál debería ser la siguiente clave numérica. He reescrito scripts en Python debido a la pésima performance de array como una lista de PHP.
Las matrices asociativas tienen la sobrecarga de rendimiento estándar de dict/hash.
¿Estás seguro de esto? Acabo de ejecutar benchmarks en una matriz de prueba de 1000 entradas (copiando a una nueva matriz, una por una), y si no especificas la clave para la nueva matriz, es consistentemente 7% más rápida (en PHP 5.2.6) – JamShady
Es posible que lo hayan cambiado recientemente. Estaba usando 5.1 cuando estaba haciendo el trabajo. El conjunto de PHP era INCORRECTO cuando habla de entradas de 10k o más. – jcoby
AFAIK este no es el caso, por favor compare: [Una tabla zend hash tiene un elemento 'nNextFreeElement' ...] (http://stackoverflow.com/questions/3698743/how-to-find-the-next-numeric -index-of-a-existing-array/3698786 # 3698786) – hakre
Es una tabla hash. La declaración de tipo y función hash está aquí:
http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_hash.h?view=markup
Hay una hilera de luces de peso y una lista enlazada dentro de los SPL (estándar php lib)
la más alta respuesta votado enlace está roto y no da esa mucha explicación.
PHP está escrito en C y la estructura subyacente es solo una matriz en C. C arrays son solo fragmentos de memoria. Los índices en las matrices C deben ser continuos, no puede tener un índice 0 y un índice 1000 que viene después. Para hacer que las claves de matriz asociativa funcionen, antes de que se agreguen a la matriz C, se convierten en índices C correctos a través de una función hash.
Para una explicación completa, este enlace me pareció mucho más informativo.
http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
- 1. acceder a las matrices asociativas en PHP
- 2. ¿Están ordenadas las matrices asociativas de PHP?
- 3. ¿Cómo se implementan las matrices en Java?
- 4. ¿Cómo se implementan las matrices en Perl?
- 5. Matrices asociativas?
- 6. ¿Las matrices de JavaScript realmente se implementan como matrices?
- 7. SOAP WSDL matrices asociativas
- 8. ¿Cómo se filtran las matrices asociativas usando una matriz de claves en PHP?
- 9. Tablas hash VS matrices asociativas
- 10. ¿Java admite matrices asociativas?
- 11. Ruby: matrices asociativas
- 12. Cómo iterar sobre matrices asociativas en Bash
- 13. Does powershell tiene matrices asociativas?
- 14. Pasar matrices asociativas en call_user_func_array (...)
- 15. comparar dos matrices asociativas y crear una nueva matriz con las matrices coincidentes, PHP
- 16. ¿Cómo comparar matrices asociativas en Powershell?
- 17. matrices asociativas multi-dimensionales en JavaScript
- 18. ¿Cómo funciona jQuery.each() con matrices asociativas (objetos)?
- 19. crear una matriz de matrices asociativas en PHP
- 20. Agregar elemento a matrices asociativas
- 21. Ordenamiento basado en matrices asociativas en D
- 22. Pasar matrices asociativas de PHP hacia y desde XML
- 23. Combinaciones asociativas de comentarios en PHP Documentor
- 24. ¿Cómo se implementan las enumeraciones en Java?
- 25. matrices asociativas rápido o mapas en Matlab
- 26. rangos de matrices asociativas en D 2
- 27. Las matrices asociativas son locales de forma predeterminada
- 28. ¿Cómo se implementan las referencias débiles?
- 29. BASH: necesito ayuda con matrices asociativas multidimensionales
- 30. matrices asociativas al leer el archivo
Voy a dejar este enlace para otra persona a través de moler, pero se puede ver el código fuente C real para PHP en [http://svn.php.net/viewvc/php/php-src /](http://svn.php.net/viewvc/php/php-src/) –