Signatur
Beschreibung
QuickHashIntStringHash ist eine spezialisierte Hashtabellen-Implementierung aus der QuickHash-Extension, die ganzzahlige Schlüssel (int) auf String-Werte abbildet. Sie wurde für Szenarien entwickelt, in denen maximale Geschwindigkeit und minimaler Speicherverbrauch bei der Verwaltung großer Mengen von Schlüssel-Wert-Paaren entscheidend sind.
Im Vergleich zu einem regulären PHP-Array bietet QuickHashIntStringHash eine deutlich effizientere Speichernutzung und schnellere Suchoperationen, wenn ausschließlich Integer-Schlüssel und String-Werte verwendet werden. Die Hashtabelle kann optional mit verschiedenen Flags konfiguriert werden, etwa um doppelte Schlüssel zuzulassen oder um Hashing-Kollisionen zu steuern.
Die Klasse unterstützt das Laden und Speichern von Hashtabellen aus bzw. in Dateien und Strings, was den Einsatz in persistenten Cache-Szenarien ermöglicht. Typische Anwendungsfälle sind ID-zu-Name-Mappings, Lookup-Tabellen für numerische IDs sowie Übersetzungs-Tabellen mit numerischen Schlüsseln.
- Schlüsseltyp:
int(32-Bit-Integer) - Werttyp:
string - Serialisierung: Speichern/Laden von/nach Datei oder String möglich
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $size Pflicht | int | Initiale Größe (Anzahl der Buckets) der Hashtabelle. Ein Wert, der die erwartete Anzahl von Elementen widerspiegelt, verbessert die Performance. Wird auf die nächste Zweierpotenz aufgerundet. | |
| $options | int | 0 | Optionale Flags als Bitmaske. Mögliche Konstanten: QuickHashIntStringHash::CHECK_FOR_DUPES (doppelte Schlüssel verhindern), QuickHashIntStringHash::DO_NOT_USE_ZEND_ALLOC (eigene Speicherverwaltung), QuickHashIntStringHash::HASHER_NO_HASH, QuickHashIntStringHash::HASHER_JENKINS1, QuickHashIntStringHash::HASHER_JENKINS2. |
Beispiele
Grundlegende Verwendung: Einträge hinzufügen und abrufen
<?php
// Hashtabelle mit 1024 Buckets erstellen
$hash = new QuickHashIntStringHash(1024);
// Einträge hinzufügen
$hash->add(1, 'Alice');
$hash->add(2, 'Bob');
$hash->add(42, 'Charlie');
// Werte abrufen
echo $hash->get(1) . PHP_EOL; // Alice
echo $hash->get(2) . PHP_EOL; // Bob
echo $hash->get(42) . PHP_EOL; // Charlie
// Prüfen ob ein Schlüssel existiert
if ($hash->exists(42)) {
echo "Schlüssel 42 vorhanden: " . $hash->get(42) . PHP_EOL;
}
// Eintrag löschen
$hash->delete(2);
echo var_export($hash->get(2), true) . PHP_EOL; // false
Hashtabelle in Datei speichern und laden
<?php
// Hashtabelle erstellen und befüllen
$hash = new QuickHashIntStringHash(512, QuickHashIntStringHash::CHECK_FOR_DUPES);
$hash->add(100, 'Produkt A');
$hash->add(200, 'Produkt B');
$hash->add(300, 'Produkt C');
// In Datei speichern
$hash->saveToFile('/tmp/produkte.hash');
// Aus Datei laden
$geladen = QuickHashIntStringHash::loadFromFile(
'/tmp/produkte.hash',
QuickHashIntStringHash::CHECK_FOR_DUPES
);
echo $geladen->get(100) . PHP_EOL; // Produkt A
echo $geladen->get(200) . PHP_EOL; // Produkt B
echo $geladen->get(300) . PHP_EOL; // Produkt C
Iteration über alle Einträge
<?php
$hash = new QuickHashIntStringHash(64);
$hash->add(10, 'Zehn');
$hash->add(20, 'Zwanzig');
$hash->add(30, 'Dreißig');
// Iteration mit foreach (QuickHashIntStringHash implementiert Iterator)
foreach ($hash as $key => $value) {
echo "$key => $value" . PHP_EOL;
}
// Wichtig · Fallstricke
Verfügbarkeit: Die QuickHash-Extension ist seit PHP 5.3 verfügbar, war aber nie Teil des PHP-Kerns und muss als PECL-Extension installiert werden. Ab PHP 7.x ist sie nur noch eingeschränkt gepflegt; in modernen Projekten sollten Alternativen wie Standard-Arrays oder spezialisierte Datenstrukturen aus SplFixedArray oder Bibliotheken erwogen werden.
Schlüsselbeschränkung: Schlüssel werden intern als 32-Bit-Integer behandelt. Bei sehr großen Integer-Werten (außerhalb des 32-Bit-Bereichs) kann es auf 64-Bit-Systemen zu unerwartetem Verhalten kommen.
Thread-Sicherheit: QuickHashIntStringHash ist nicht thread-sicher. Bei parallelen Schreibzugriffen (z. B. in Kombination mit pthreads) sind externe Sperrmechanismen erforderlich.
Die Klasse implementiert das Iterator-Interface, sodass Instanzen direkt mit foreach iteriert werden können.