Kann jemand erklären, wie PHP assoziative Arrays implementiert? Welche zugrunde liegende Datenstruktur verwendet PHP? Hasht PHP den Schlüssel und speichert ihn in einer Art Hash-Map? Ich bin neugierig, weil ich mich gefragt habe, welche Leistung assoziative Arrays beim Einfügen und Suchen von Schlüsseln haben.Wie sind assoziative Arrays in PHP implementiert?
Antwort
Nun, für das, was es wert ist, alle PHP-Arrays sind assoziative Arrays.
Es ist alles Hash-Tabellen, nach Quellen in verschiedenen Webforen: http://www.usenet-forums.com/php-language/15348-zend-engine-array-implementation.html
Wenn Sie sicher sein wollen, lesen Sie die Quelle, dann kompilieren, aber stellen Sie sicher, Sie können trust your compiler (Achtung: PDF, und nicht verwandt, aber sehr cool).
Link ist kaputt. –
@EBGreen ist korrekt.
Das gibt Ihnen einige interessante Leistungsprobleme, besonders wenn Sie ein Array als eine Liste behandeln und den Operator [] (Array hinzufügen) verwenden. PHP scheint den größten numerischen Schlüssel nicht zu cachen und fügt einen hinzu, stattdessen scheint er alle Schlüssel zu durchlaufen, um zu finden, was der nächste numerische Schlüssel sein soll. Ich habe Skripte in Python umgeschrieben, weil PHP eine düstere Array-as-a-List-Performance hat.
Assoziative Arrays haben den Standard-Dict/Hash-Performance-Overhead.
Sind Sie sich sicher? Ich habe gerade Benchmarks auf einem Test-Array von 1000 Einträgen ausgeführt (Kopieren in ein neues Array, eins nach dem anderen), und wenn Sie den Schlüssel für das neue Array nicht angeben, ist es konsistent 7% schneller (auf PHP 5.2.6) – JamShady
Es ist möglich, dass sie es kürzlich geändert haben. Ich habe 5.1 benutzt, als ich die Arbeit gemacht habe. PHP-Array war AWUL, wenn Sie über 10k Einträge oder mehr sprechen. – jcoby
AFAIK das ist nicht der Fall, bitte vergleichen: [Eine Zend Hash Tabelle hat ein Element 'nNextFreeElement' ...] (http://stackoverflow.com/questions/3698743/how-to-find-the-next-numeric) -Index-eines-bestehenden-Array/3698786 # 3698786) – hakre
Es ist eine Hash-Tabelle. Die Typdeklaration und Hashing-Funktion sind hier:
http://svn.php.net/viewvc/php/php-src/trunk/Zend/zend_hash.h?view=markup
Es ist ein leichtes Array und eine verknüpfte Liste innerhalb der spl (Standard php lib)
Die höchste gestimmt Antwort Link gebrochen ist und nicht geben So viel Erklärung.
PHP ist in C geschrieben und die zugrunde liegende Struktur ist nur ein C-Array. C-Arrays sind nur Teile des Speichers. Die Indizes in C-Arrays müssen fortlaufend sein. Sie können keinen Index 0 und einen Index 1000 haben, der danach kommt. Damit assoziative Array-Schlüssel funktionieren, bevor sie dem C-Array hinzugefügt werden, werden sie über eine Hash-Funktion in geeignete C-Indizes konvertiert.
Für eine vollständige Erklärung, fand ich diesen Link viel informativer.
http://nikic.github.io/2012/03/28/Understanding-PHPs-internal-array-implementation.html
- 1. Sind PHP-assoziative Arrays bestellt?
- 2. Assoziative Arrays sind standardmäßig lokal
- 3. Zugriff auf assoziative Arrays in PHP
- 4. Hat Powershell assoziative Arrays?
- 5. Mehrdimensionale assoziative Arrays in JavaScript
- 6. Assoziative Arrays und Bindungsparameter
- 7. Assoziative Arrays Berechnung
- 8. Ruby: Assoziative Arrays
- 9. assoziative Arrays' ".keys()"
- 10. Wie kombiniere ich assoziative Arrays in bash?
- 11. Wie man assoziative Arrays in Powershell vergleicht?
- 12. PHP assoziative Arrays - wie Integer als String behandeln
- 13. PDO assoziativer Arrays - Rückkehr assoziative
- 14. Anfrage für MongoDB Assoziative Arrays
- 15. SimpleXML, assoziative Arrays und XPath
- 16. PHP Kombinieren Sie assoziative Arrays Wenn Specific Key Spiele
- 17. PHP - Insert in assoziative Tabelle
- 18. re php assoziative Array
- 19. Wie werden Arrays in Perl implementiert?
- 20. Was sind C++ - Arrays in PHP?
- 21. Welcher Zuordnungstyp für assoziative Arrays? Lehre ODM
- 22. Stopp PhpStorm von Ausrichten assoziative Arrays
- 23. PHP Arrays und Speicherzuweisung
- 24. Enkodieren assoziative Array als gültige PHP
- 25. PHP: Re-Reihenfolge assoziative Array
- 26. Auto implementiert Schnittstellen in Arrays
- 27. Wie RethinkDB-Joins implementiert sind?
- 28. Dynamisch generierte PHP multidimensionale assoziative Array
- 29. konvertieren PHP assoziative Array in JavaScript-Objekt
- 30. PHP Schlüssel/Wert in assoziative Array einfügen
Ich werde diesen Link für jemanden verlassen sonst durch schleifen, aber Sie können die tatsächlichen C-Quelle für PHP an [http://svn.php.net/viewvc/php/php-src ansehen /](http://svn.php.net/viewvc/php/php-src/) –