dedlfix: PHP - Mysql -> Zweidimensionales Array erzeugen

Beitrag lesen

echo $begrüßung;

Nicht dass wir beide aneinander vorbeireden: array('schlüssel' => 'element', ...). Die Elemente interessieren nicht weiter, die ergeben sich, wenn man in der Liste der Schlüssel den richtigen gefunden hat.

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.
Man steckt den Schlüssel in die Hashfunktion, welche als Ergebnis einen Index in den Hashtable (selber ein Array) liefert. Dort ist die Speicheradresse zu finden, an der sich die gewünschten Daten befinden. Deshalb können diese Datensätze, im Gegensatz zum herkömmlichen Array, auch kreuz und quer im Speicher verteilt sein.

Um die Daten geht es (mir) nicht, sondern darum, den Schlüssel zu finden, bzw. wie PHP anhand eines Strings, der einen Schlüssel darstellt, in der Auslistung der Schlüssel eines Arrays diesen Schlüssel findet.
Ich nehme also mit, dass man den String in die Hash-Funktion steckt, und heraus kommt eine Positionsangabe in der Schlüsselauflistung.

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.
Das ist richtig; hängt eben von der Komplexität der Hashfunktion ab. Daß das trotzdem viel "billiger" zu haben ist als eine Suche, bei der erstmal die Arrayelemente aus dem Speicher gelesen werden müssen (im ungünstigsten Fall sogar alle), sollte klar sein.

Halten wir also fest, und kommen damit wieder auf das Laufzeit-Problem des OPs zurück: Ob die Hash-Funktion nun komplex oder weniger komplex ist, (deutlich) aufwendiger als eine Positionsbestimmung per Multiplikation ist sie. Da das aber PHP-Interna sind, die man als Anwender sowieso nicht beeinflussen kann, hat man schlechte Karten.
Alternativ zu einem PHP-Array könnte man nun einen String verwenden und dessen Zeichen als fortlaufend angeordnete Array-Elemente betrachten/missbrauchen/wieauchimmer. Ein Zugriff auf ein Zeichen anhand einer Position sollte von PHP mit einfachen Rechenoperationen bewerkstelligt werden können. Das setzt natürlich voraus, dass man nicht mehr als 256 verschiedene Werte pro Feld speichern muss. Doch ob das wirklich eine brauchbare Lösung ist, müsste im Versuch ermittelt werden, da dieser String auch erst einmal aus dem Datenbankinhalt generiert werden muss.

[1] Mindestens genauso wichtig sind wahrscheinlich die Mechanismen zur Behandlung von Kollisionen. Aber das bringt dieses Thema so langsam an einen Punkt, wo ich die Lektüre eines Fachbuchs vorschlagen würde, anstatt hier im Forum weiter darüber zu referieren. ;)

Bei einem PHP-Array kann es keine zwei Schlüssel mit dem gleichen Wert geben. Wenn die Hash-Funktion für unterschiedliche Schlüssel den gleichen Hashwert errechnet, war sie nicht optimal. Aber das ist ein anderes Thema.

echo "$verabschiedung $name";