Hi.
Tag Bademeister,
Tag? Um 23.51? Student? ;-)
Ein Ass. Array hat per Definition keine Positionen!
Doch.
Jein.
Nein. :-)
Ich hab den Artikel mal angelesen:
There are two kinds of arrays in PHP: indexed and associative.
ist Unsinn. Hätte besser geheißen:
"There is one kind of array in PHP: array."
Es gibt zwei Typen von Schlüsseln(!), nämlich numerische und Strings. Und beide können in demselben Array vorkommen. Wenn einer der Typen nicht vorkommt (oder gar beide), macht das das Array zu nichts Speziellem.
Noch viel größerer Blödsinn steht da zum Thema "Quoten von Array-Schlüsseln". Ich mag es hier gar nicht zitieren. Viel weiter hab ich nicht gelesen, aber es reicht mir, um Dich zu bitten, diesen Artikel nie nie nie mehr zu verlinken! Und am besten auch nicht selber zu lesen :-) Höchstwahrscheinlich steht ohnehin nichts drin, was nicht in der PHP-Doku steht und richtig ist.
Dass in PHP überhaupt so etwas wie eine Ordnung auf Arrays existiert liegt daran, dass die Arrays intern als sortierte Map abgelegt werden,
Wieso also oben "Jein"?
sie sind also automatisch nach ihrem Schlüssel (ob numerisch oder nicht) sortiert.
Nein. Den Schlüsseln (ob numerisch oder nicht) kannst Du die Sortierung nicht ansehen.
»»array_push o.ä. funktioniert deswegen darauf auch nicht.
Doch.
Was daran liegt, dass in PHP alle Arrays intern assoziativ gespeichert werden, ja. Es kommt aber, wenn man sich diese besondere Eigenschaft der PHP-Arrays zu Nutze macht, in den seltensten Fällen das raus, was sich der Programmierer erwartet
Wenn der Programmierer weiß, was die Funktion array_push tut, dann kommt bei ihrer Benutzung auch das raus, was der Programmierer erwartet. Oder?
"[...]Attempting to append to an associative array is almost always a programmer mistake,
Das kann gut sein. Weiß ich nicht. Aber das war doch nun wirklich nicht die Frage.
Ein assoziatives Array mit push, pop usw. zu behandeln mag funktionieren, weil PHP eben intern auch mit numerischen Arrays wie mit assoziativen Arrays umgeht - semantisch ist es aber Blödsinn.
Mit array_pop wär ich da schon ein bisschen vorsichtiger, ehrlich gesagt.
Ein assoziatives Array bildet keine Liste mit "vorne" und "hinten" - die Array-SCHLÜSSEL hingegen schon.
Die Aussage versteh ich nicht. (Wirklich nicht.)
Einigen wir uns drauf, dass die Anwendung von array_push auf (rein) assoziative Arrays im allgemeinen nicht gerade ein heißer Tipp für PHP-Anfänger ist ;-)
Viele Grüße,
der Bademeister