Hi!
2.: Array als Datentyp: das sind PHP-Arrays.
Diese Bedingungen trefffen auf die "Arrays" in PHP nicht zu.
Insbesondere die Forderung nach geschlossenen Indexen und auch die nachfolgend zitierte Forderung nach Berechnenbarkeit über den Index sind nicht erfüllt.
Die ist für PHP nicht relevant, weil man nicht auf Speicheradressen zugreifen kann, also nützt deren Berechnung auch nichts.
Können wir uns darauf einigen, dass PHP-Arrays Dictionarys mit einer - ohne weiteres Zutun - festen Reihenfolge der Elemente sind?
Hingegen treffen bei der verketteten Liste fast alle Forderungen zu. Einzig die Forderung, nach einem zentralen Deskriptor/Pointer auf das aktuelle Element (ein einzelnes) des gesamten Baumes ist in PHP nicht erfüllt, da jede (Teil-)Liste des Baumes einen eigenen führt. Man muss hierzu eine Referenz verwenden.
Welches sind denn diese "fast alle Forderungen"? Ich sehe von meinem Verständnis der Eigenschaften verketteter Listen eigentlich gar keine.
- (Vorgänger und) Nachfolger von beliebig referenzierten Elementen lässt sich ermitteln - nicht erfüllt.
- Elemente lassen sich ausgehend von beliebig referenzierten Elementen einfügen - nicht erfüllt, (für array_splice() man muss die Positionsnummer kennen).
Die (implizite) Forderung von Dedlfix, man müsse auf die internen Verwaltungsinformationen einen Liste / eines Baumes direkten Zugriff haben, ist allerdings falsch. Es ist durchaus richtig, diese zu kapseln und nur über abgesicherte Funktionen / Methoden zugänglich zu machen.
Diese Funktionen stehen aber nicht zur Verfügung. Wenn das nach außen hin nicht sichtbar ist, dann ist es für mich irrelevant, wie das intern gelöst ist.
Die Darstellung als Array führt in PHP regelmäßig wieder zu Irritationen und Unverstand. Daher werde ich auch in Zukunft weiter dafür eintreten, die "Arrays" in PHP als verkettete Listen und daraus gebaute Bäume darzustellen. Dies kommt dem Verhalten am nächsten und erledigt alle mir bisher bekannten Vorstellungsprobleme...
Aus der intern verwendeten Liste selbst wird kein Baum erstellt, noch wird sie zu einem, wenn man PHP-Arrays schachtelt. Die Elemente der Liste speichern als Nutzlast einen Variablencontainer. Ob dieser nun einen skalaren Wert oder ein Array oder Objekt enthält ist für die Liste nicht relevant. Man kann nicht mit Funktionen, die die Organisation der Liste beträfen, auf diese Unterarrays zugreifen. Es sind die ganz normalen Variablenfunktionen, mit denen man sich weiterbewegen muss. Wenn du dir hingegen mal Nested Sets als Baumstruktur ansiehst, ist die Verschachtlung anhand der Verwaltungsinformationen (L,R) nachvollziehbar.
So ein verschachteltes Gebilde sieht nach außen hin wie ein Baum und manchmal wie ein multidimensionales Array aus, aber dazu brauch ich weder die Lste noch ihre nicht nutzbaren Eigenschaften, um das Gebilde zu erklären.
Lo!