Start · Sprachen · PHP · Referenz · QuickHashIntHash

QuickHashIntHash

Klasse

Implementiert eine performante Hashtabelle mit Integer-Schlüsseln und Integer-Werten für schnellen Zugriff auf große Datensätze.

seit PHP 5.3.0 Kategorie: misc

Signatur

class QuickHashIntHash

Beschreibung

QuickHashIntHash ist eine spezialisierte Hashtabellen-Implementierung aus der QuickHash-Erweiterung, die ausschließlich Integer-Schlüssel und Integer-Werte unterstützt. Sie ist speziell für Szenarien optimiert, in denen sehr große Mengen von Integer-Paaren gespeichert und blitzschnell abgefragt werden müssen – deutlich schneller als PHP-Arrays bei entsprechender Datenmenge.

Die Klasse erlaubt das Hinzufügen, Aktualisieren, Löschen und Abfragen von Schlüssel-Wert-Paaren. Darüber hinaus können Hashtabellen-Inhalte in Dateien gespeichert und von dort geladen werden, was persistente Nutzung ohne erneuten Aufbau ermöglicht.

Typische Einsatzgebiete sind: Caching von berechneten Integer-Ergebnissen, schnelle Lookups in umfangreichen Datensätzen (z. B. aus Datenbanken), Häufigkeitszählungen oder Mapping von IDs auf Statuswerte.

Die Klasse ist Teil der QuickHash-PECL-Erweiterung und muss daher separat installiert werden. Sie implementiert das Serializable-Interface und unterstützt Flags wie QuickHashIntHash::CHECK_FOR_DUPES, um doppelte Schlüssel zu erkennen.

Parameter

Name Typ Default Beschreibung
$size Pflicht int Anzahl der Bucket-Slots in der Hashtabelle. Eine Primzahl oder eine Zweierpotenz liefert in der Regel die beste Verteilung und Performance.
$options int 0 Bitmaske aus Klassen-Konstanten, z. B. QuickHashIntHash::CHECK_FOR_DUPES, um doppelte Einträge beim Hinzufügen zu prüfen, oder QuickHashIntHash::DO_NOT_USE_ZEND_ALLOC für eigene Speicherverwaltung.

Rückgabewert

Typ

Beispiele

Grundlegende Verwendung: Einträge hinzufügen und abfragen

<?php
// Hashtabelle mit 1024 Buckets erstellen
$hash = new QuickHashIntHash(1024);

// Schlüssel-Wert-Paare hinzufügen
$hash->add(1, 100);
$hash->add(2, 200);
$hash->add(3, 300);

// Wert anhand des Schlüssels abrufen
$value = $hash->get(2);
echo "Wert für Schlüssel 2: " . $value . PHP_EOL;

// Prüfen, ob ein Schlüssel existiert
if ($hash->exists(3)) {
    echo "Schlüssel 3 ist vorhanden." . PHP_EOL;
}

// Eintrag löschen
$hash->delete(1);
echo "Schlüssel 1 nach Löschen vorhanden: " . ($hash->exists(1) ? 'ja' : 'nein') . PHP_EOL;
?>
Wert für Schlüssel 2: 200 Schlüssel 3 ist vorhanden. Schlüssel 1 nach Löschen vorhanden: nein

Hashtabelle in Datei speichern und wieder laden

<?php
// Hashtabelle erstellen und befüllen
$hash = new QuickHashIntHash(512, QuickHashIntHash::CHECK_FOR_DUPES);
for ($i = 1; $i <= 5; $i++) {
    $hash->add($i, $i * 10);
}

// In Datei speichern
$hash->saveToFile('/tmp/mein_hash.dat');
echo "Hashtabelle gespeichert." . PHP_EOL;

// Aus Datei laden
$geladen = QuickHashIntHash::loadFromFile('/tmp/mein_hash.dat');
echo "Wert für Schlüssel 4 (geladen): " . $geladen->get(4) . PHP_EOL;

// Anzahl der Einträge
echo "Anzahl Einträge: " . $geladen->getSize() . PHP_EOL;
?>
Hashtabelle gespeichert. Wert für Schlüssel 4 (geladen): 40 Anzahl Einträge: 5

// Wichtig · Fallstricke

Installation: QuickHashIntHash ist Teil der PECL-Erweiterung QuickHash. Sie muss über PECL (pecl install quickhash) installiert und in der php.ini aktiviert werden. Ab PHP 8.0 ist die Erweiterung offiziell nicht mehr gebündelt, sodass Kompatibilität je nach Umgebung geprüft werden sollte.

Schlüsselkollisionen: Ohne das Flag QuickHashIntHash::CHECK_FOR_DUPES werden doppelte Schlüssel stillschweigend akzeptiert, was zu unerwartetem Verhalten beim get()-Aufruf führen kann. Bei unsicheren Datenquellen sollte dieses Flag immer gesetzt werden.

Speicherverwaltung: Bei sehr großen Hashtabellen kann die Wahl zwischen DO_NOT_USE_ZEND_ALLOC und Standard-Zend-Allokator die Geschwindigkeit beeinflussen. Tests unter realen Bedingungen sind empfehlenswert.