Wie verfolgt PHP die Reihenfolge in einem assoziativen Array?

8

Wenn ein neuer Wert auf ein indiziertes Array gesetzt wird

%Vor%

Die PHP-Dokumentation erklärt, wie es in der Position [MAX_INDEX + 1] hinzugefügt wird.

Wenn ein neuer Wert auf ein assoziatives Array gesetzt wird

%Vor%

Es funktioniert genauso, aber ich sehe keine Erklärung in der Dokumentation, um zu bestätigen, wie oder warum es das tut. Die Reihenfolge scheint in meiner Implementierung konsistent zu sein, aber woher weiß ich, dass die Reihenfolge gleich bleibt? Weiß jemand, wie PHP dies am Backend implementiert?

    
Evil Elf 16.03.2011, 17:33
quelle

4 Antworten

0

Wie sind assoziative Arrays in PHP implementiert? könnte Ihnen helfen einige Einblicke.

Es scheint, dass PHP-Arrays im Wesentlichen Hash-Tabellen sind, so dass die Reihenfolge des Arrays gleich bleibt, bis Sie es neu anordnen (z. B. durch Sortieren des Arrays).

BEARBEITEN: Es scheint, dass dies nach unten geht, erlauben Sie mir, die Quellen, mit denen ich verlinkt habe, explizit in den Kommentar hier einzubeziehen ...

  • "PHP assoziative Arrays sind in der Tat eine Implementierung von HashTables", von Wie wird das PHP-Array auf der C-Ebene implementiert?

  • Auch von dieser Quelle: "Das PHP-Array ist eine verkettete Hash-Tabelle (Nachschlagen von O (c) und O (n) bei Schlüsselkollisionen), die int- und string-Schlüssel erlaubt. Es verwendet 2 verschiedene Hash-Algorithmen um die beiden Typen in denselben Hash-Schlüsselraum einzupassen. "

  • "Alles ist ein HashTable" aus Ссылка

n00dle 16.03.2011, 17:46
quelle
2

MAX_INDEX hat eigentlich nichts mit der Bestellung zu tun.
Sie können

tun %Vor%

und array werden diese Reihenfolge beibehalten.

PHP-Array ist eine geordnete Map, also ist es die Map, die die Reihenfolge hält.
Array-Elemente behalten nur die Reihenfolge, seit sie hinzugefügt wurden (oder sie wurde vollständig von einer Array-Manipulationsfunktion modifiziert).
das ist alles.

    
Your Common Sense 16.03.2011 17:39
quelle
0

Ich ziehe es vor, mich auf ksort zu verlassen. Nach meiner Erfahrung bleiben Arrays konsistent, bis Sie anfangen, Elemente zu entfernen. Besser, sie manuell zu sortieren und zu wissen, dass sie in der von Ihnen gewünschten Reihenfolge sind.

    
Ryre 16.03.2011 17:42
quelle
0

Alle PHP-Arrays, numerisch und assoziativ, sind als sogenannte "Ordered Hash-Table" implementiert. Dies ist ein datenwissenschaftlicher Begriff, der sich wie folgt zusammensetzt: "Ein vernünftiger schneller Schlüsselwertspeicher, der die Reihenfolge speichert, in der Schlüssel und Werte eingefügt wurden". Mit anderen Worten, PHP-Arrays haben ein bisschen Speicher, der zum Zweck der Reihenfolge gespeichert wird. Jedes Mal, wenn Sie etwas einfügen, fügt PHP automatisch die Reihenfolge ein.

Interessanterweise passiert dies auch für numerische Schlüssel - wenn Sie also die Werte 1,2,3,4,5 in ein PHP-Array schreiben, verfolgt PHP die Reihenfolge immer noch separat. Wenn das verschwenderisch klingt, ist es, weil es ist! Es rettet jedoch Gehirnzyklen, die verwendet werden können, um die Probleme anderer zu lösen, real oder imaginär.

    
cmc 26.03.2018 21:24
quelle

Tags und Links