Signatur
Beschreibung
QuickHashIntSet ist eine speziell optimierte Datenstruktur für Mengen ganzer Zahlen. Im Gegensatz zu PHP-Arrays oder der SplFixedArray ist sie auf schnelle Mitgliedschaftsprüfungen (membership checks) ausgelegt und verbraucht dabei deutlich weniger Speicher, wenn große Mengen von Integer-Werten verwaltet werden.
Die Klasse erlaubt das Hinzufügen, Löschen und Prüfen von Elementen sowie das Laden und Speichern der Menge aus bzw. in Dateien oder Strings. Dies ist besonders nützlich, wenn eine Menge vorkompiliert und wiederverwendet werden soll – z. B. als Blockliste von Benutzer-IDs, IP-Adressen (als Integer) oder anderen numerischen Schlüsseln.
Über Flags beim Erstellen lässt sich das Verhalten der internen Hash-Tabelle steuern: etwa ob Duplikate stillschweigend ignoriert werden, ob Resizing erlaubt ist und ob auf Prüfsummen-Validierung beim Laden aus Dateien verzichtet wird.
Hinweis: QuickHashIntSet ist Teil der QuickHash-Extension, die als PECL-Paket verfügbar ist und standardmäßig nicht in PHP enthalten ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $size Pflicht | int | Anfangsgröße der internen Hash-Tabelle (Anzahl der Buckets). Größere Werte reduzieren Kollisionen, erhöhen aber den Speicherbedarf. | |
| $options | int | 0 | Bitmask aus Klassen-Konstanten wie QuickHashIntSet::CHECK_FOR_DUPES, QuickHashIntSet::DO_NOT_USE_ZEND_ALLOC oder QuickHashIntSet::HASHER_NO_HASH zum Steuern des Verhaltens. |
Rückgabewert
Beispiele
Grundlegende Verwendung: Elemente hinzufügen und prüfen
<?php
// Neue Menge mit 1024 Buckets erstellen
$set = new QuickHashIntSet(1024);
// Elemente hinzufügen
$set->add(42);
$set->add(100);
$set->add(999);
// Mitgliedschaft prüfen
var_dump($set->exists(42)); // bool(true)
var_dump($set->exists(7)); // bool(false)
// Element entfernen
$set->delete(100);
var_dump($set->exists(100)); // bool(false)
echo 'Anzahl Elemente: ' . $set->getSize() . PHP_EOL;
Menge in Datei speichern und wiederherstellen
<?php
// Menge erstellen und befüllen
$set = new QuickHashIntSet(512, QuickHashIntSet::CHECK_FOR_DUPES);
foreach ([1, 2, 3, 5, 8, 13, 21] as $value) {
$set->add($value);
}
// In Datei persistieren
$set->saveToFile('/tmp/fibonacci.set');
// Später aus Datei laden
$loaded = QuickHashIntSet::loadFromFile('/tmp/fibonacci.set');
var_dump($loaded->exists(13)); // bool(true)
var_dump($loaded->exists(4)); // bool(false)
Menge als String serialisieren und deserialisieren
<?php
$set = new QuickHashIntSet(256);
$set->add(10);
$set->add(20);
$set->add(30);
// Als binären String exportieren (z. B. für Cache oder Session)
$data = $set->saveToString();
// Aus String wiederherstellen
$restored = QuickHashIntSet::loadFromString($data);
var_dump($restored->exists(20)); // bool(true)
var_dump($restored->exists(25)); // bool(false)
// Wichtig · Fallstricke
Verfügbarkeit: Die QuickHash-Extension ist nicht standardmäßig in PHP enthalten. Sie muss über PECL installiert werden (pecl install quickhash) oder ist in manchen Distributionspaketen enthalten.
Konstanten: Nützliche Klassen-Konstanten sind u. a. QuickHashIntSet::CHECK_FOR_DUPES (verhindert doppelte Einträge, kostet etwas Performance), QuickHashIntSet::DO_NOT_USE_ZEND_ALLOC (verwendet Systemspeicher statt Zend-Speicherverwaltung) und QuickHashIntSet::HASHER_NO_HASH (deaktiviert Hashing, nur sinnvoll bei gleichmäßig verteilten Werten).
Typbeschränkung: Die Menge speichert ausschließlich int-Werte. Float-Werte werden beim Einfügen stillschweigend zu Integer konvertiert; Strings oder andere Typen führen zu unerwartetem Verhalten.
Threadsicherheit: Die Klasse ist nicht threadsicher. Bei Verwendung in Multithread-Umgebungen (z. B. mit pthreads) müssen externe Sperrmechanismen verwendet werden.