Start · Sprachen · PHP · Referenz · QuickHashIntStringHash

QuickHashIntStringHash

Klasse

Implementiert eine performante Hashtabelle mit Integer-Schlüsseln und String-Werten.

seit PHP 5.3.0 Kategorie: misc

Signatur

class QuickHashIntStringHash

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
Alice Bob Charlie Schlüssel 42 vorhanden: Charlie 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
Produkt A Produkt B 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;
}
10 => Zehn 20 => Zwanzig 30 => Dreißig

// 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.