dedlfix: Arrays sortieren

Beitrag lesen

Hi!

PHP organsisiert die Daten als Listen, die man sich auch als verkettete Listen vorstellen darf. Miteinander verknüpfte (verkettete) Listen ergeben dann aber defininitionsgemäß eine Baumstruktur. Mit dieser Vorstellung kommt man auch am weitesten.
Wieso willst Du den Leuten eigentlich immer und immer wieder das Bild von verketteten Listen in den Kopf hämmern, wenn es um Arrays in PHP geht? Am anschaulichsten ist doch wirklich die Definition, daß ein Array-Element in PHP *alles* sein kann, z. B. auch ein anderes Array. Worin genau besteht der Verständnisgewinn Deiner Erklärung?
Es stimmt ja, daß bei den Arrays intern verkettete Listen zum Einsatz kommen (sogar mehr als Du vermutlich glaubst). Das ist aber ganz sicher nicht der entscheidende Aspekt der PHP-Arrays. Dieser besteht nämlich darin, daß die Arrays als Hash Maps implementiert sind, was eben dazu führt, daß z. B. *nicht* die ersten zwanzig Elemente einer Liste durchlaufen werden müssen, um auf das einundzwanzigste zuzugreifen.

Es geht um ein möglichst treffendes Vorstellungsmodell.
Eine beidseitig verkettete Liste mit isolierten Listpointern trifft dies am besten.

Warum benötigst du diese Verkettung zur Erklärung?

  • Man kann Elemente in die Liste einhängen. Standard ist das Ende,
      man kann aber an jeder Stelle Elemente einhängen.

PHP kennt aber kein Einfügen an beliebigen Stellen, lediglich für vorn und hinten gibt es explizite Funktionen. Insofern ist das Verkettungsmerkmal nicht interessant und es reicht, sich einen Stapel (wie bei Papier) vorzustellen. Man kann oben und unten was anfügen und an beliebigen Stellen ein Blatt entnehmen (unset). Ansonsten ist es mir egal, ob der Stapel abgeheftet ist, wie eine Girlande zusammenhängt oder sonstwie zusmmengehalten wird.

  • Die Elemente stehen einzeln. Das heißt, ihre Position im Speicher hat nichts
      mit ihrem Index zu tun. Ihre Position in der Liste ist nicht von der Liste
      abhängig (wo gerade ein freier Platz ist), sondern nur über ihre Vorgänger- und
      Nachfolgerelemente bestimmbar. Man muss die Kette ablaufen.

Inwiefern soll das einen PHP-Programmierer interessieren? Egal wie das abgelegt ist, er hat darauf keinen Einfluss.

  • Der "Index" gehört zum Element und nicht zur Liste, auch wenn sichergestellt wird,
      dass es ihn in der Kette nicht doppelt geben kann.

Ebenfalls nicht beeinflussbar, deswegen sehe ich das als irrelevant an.

  • Über den Index alleine lässt sich die Position in der Kette (Liste) nicht bestimmen.
      Die Position in der Liste kann unabhängig vom Index gewählt werden.

Die Position ist aus PHP heraus weder feststellbar, wenn man nicht gerade (mit foreach) iteriert und mitzählt, noch kann sie direkt beeinflusst werden. (Indirekt nur durch Sortieren.)

  • Man kann in einer Liste vorwärts und rückwärts navigiern, nicht jedoch springen

Auch nicht interessant. Man hat die Keys, um damit auf beliebige Elemente zuzugreifen. Wie das intern gelöst ist, ist nicht relevant, man hat darauf keinen Einfluss.

  • Listen können weitere Listen enthalten. Dies ist eine der Definitionen für eine Baumstruktur

Die Verschachtlungsmöglichkeiten benötigen ebensowenig verkettete Listen zur Erklärung wie Arrays mit nur skalaren Elementen. Wenn man den Papierstapel als Model heranziehen will, wäre eine Verschachtlung ein Verweis auf einen anderen Stapel. Wo sich dieser andere Stapel befindet, ist nebensächlich, der Verweis reicht zum Finden.

Lo!