echo $begrüßung;
Wenn vom Schlüssel ein Hashwert gebildet wird, damit, wie ich annehme, die Elemente der Schlüssel-Liste eine gleiche Länge haben ...
Der eigentliche Sinn einer solche Hashmap ist es, den Zugriff auf seine Elemente mit O(1) zu ermöglichen.
Ich bin kein Informatiker und habe auch nicht Mathematik studiert. Erklärst du (oder jemand anderes) (mir) deshalb bitte kurz, was es mit O(1) auf sich hat. Es hat etwas mit Komplexität und Aufwand zu tun, soviel weiß ich immerhin. :-) Ein Verweis auf eine Quelle reicht auch, aber http://de.wikipedia.org/wiki/Landau-Symbole habe ich nicht verstanden, weil mir dazu die Grundlagen fehlen.
Was genau du jetzt mit der Länge der Elemente meinst, weiß ich nicht.
0 1 2 3 4 <- Keys
|oo|oo|oo|oo|oo|...
01 23 45 67 89 ...
o ist jeweils eine Speicherzelle, Die | sind nur der Optik wegen eingefügt. Jedes Element belegt hier zwei Zellen. Die Position eines Elements lässt sich mit key·2 berechnen, weil die Elemente gleich groß sind, jeweils 2 o belegen. Man kann also genau voraussagen, wo die Elemente liegen und muss sich nicht an ihnen entlanghangeln.
0 1 2 3
|ooo|ooooo|oo|o...
012 34567 89 0...
E(lement) 0 hat eine Länge von 3, also ist E.1 an Position 3 zu finden. E.3s Position ergibt sich nur aus der Länge der Elemente 0, 1 und 2.
... 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.
Das kann ich dir aus dem Kopf leider auch nicht beantworten. Dazu müßte ich nachschauen, wie foreach intern umgesetzt wurde.
Lass ich mal als Erinnerung stehen.
Die Schlüsselauflistung - ob nun mit gehashten Werten oder nicht - muss durchsucht werden. Die Schlüssel können, wie erwähnt, in beliebiger Reihenfolge abgelegt sein, so dass die Position eines Elements sich nicht mit einer vergleichsweise einfachen Multiplikation errechnen lässt.
Deshalb benutzt man ja eine Hashmap. Der Hash beschreibt dann eindeutig die Position des Elements -- eben *ohne* die gesamte Liste zu durchsuchen. Wie gesagt, O(1).
Dann brauch ich jetzt auch noch eine Erklärung (oder Link zu einer), wie man einen Hashwert findet, ohne die Sammlung der Hashwerte (vollständig, teilweise, wie auch immer) durchsuchen zu müssen.
Nur müssen diese Strukturen eben nicht aufwendig durchsucht werden.
Vielleicht ist es nicht aufwendig, die Hash-Liste zu durchsuchen, aber deutlich komplexer als eine Multiplikation stelle ich mir das schon vor.
echo "$verabschiedung $name";