Signatur
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
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;
?>
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;
?>
// 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.