Blaubart: PHP - Mysql -> Zweidimensionales Array erzeugen

Beitrag lesen

Tach.

In typstrengen Sprachen sind Arrays Auflistungen von Elementen gleichen Typs. Die Position eines Werts lässt sich anhand des Schlüssels multipliziert mit der Elementgröße ermitteln. Das bedeutet, dass der Schlüssel sich aus der Position des Elements ergibt, und damit lückenlos von 0 bis n geht. Das gilt auch für weitere Dimensionen.

Hier wäre ich übrigens vorsichtig. Nicht alle Sprachen speichern, nur weil sie mit streng typisierten Variablen hantieren, mehrdimensionale Arrays so wie du beschreibst. Auch ein Array von Pointern ist eine gängige Methode, um mehrere Dimensionen darzustellen. Dabei zeigen die Pointer der "ersten Dimension" auf Arrays der "zweiten Dimension", die im Speicher aber nicht alle zwangsweise direkt hintereinander angeordnet sein müssen. Mit einer einfachen Multiplikation und Addition zur Speicheradresse, die deine Variable "mehrdimensionales Array" beschreibt, kannst du in diesem Fall auch nicht hantieren. So hardwarenah wilst du das in Hochsprachen aber in vielen Fällen sowieso nicht ...

Wenn vom Schlüssel ein Hashwert gebildet wird, [...] wie kommt dann PHP an den ungehashten Wert des Schlüssels ($key) bei einem foreach ($array as $key => $value)? Meines Wissens nach ist Hashwert-Bilden eine unumkehrbare Operation.

Ich habe eine PHP4-Source überflogen, die ich noch auf der Festplatte hatte. Es sieht folgendermaßen aus:

PHP berechnet beim Einfügen einer Variablen in die Hashmap einen Hash nur für Schlüssel, die nicht ausschließlich numerisch sind -- also Zeichenketten, die in PHP ja als Schlüssel zugelassen sind. *Zusätzlich* zum Hash wird auch der eigentliche Schlüssel gespeichert. Rein numerische Schlüssel werden hingegen direkt für die Indexbestimmung benutzt; das Original wird also gar nicht erst verändert. In beiden Fällen ist somit der Originalschlüssel noch bekannt und kann dazu verwendet werden, um den Schlüssel zu einem bekannten Wert zu bestimmen -- quasi die Gegenrichtung des normalen Lookups. Um möglichst einfach durch alle gespeicherten Elemente laufen zu können (z. B. mit foreach), wird zusätzlich eine verkettete Liste der Elemente verwaltet.

--
Once is a mistake, twice is jazz.