Start · Sprachen · PHP · Referenz · collator_get_sort_key

collator_get_sort_key

Funktion

Gibt den binären Sortierschlüssel für einen String gemäß den Regeln eines <code>Collator</code>-Objekts zurück.

seit PHP 5.3.4 Kategorie: string

Signatur

collator_get_sort_key(Collator $object, string $string): string|false

Beschreibung

collator_get_sort_key() erzeugt einen binären Sortierschlüssel für den übergebenen String auf Basis der Sortierregeln des Collator-Objekts. Dieser Schlüssel kann direkt mit strcmp() oder ähnlichen Byte-Vergleichsfunktionen verglichen werden und liefert dabei dasselbe Ergebnis wie ein vollständiger ICU-Collation-Vergleich – jedoch mit deutlich geringerem Aufwand bei wiederholtem Vergleichen desselben Strings.

Die Funktion ist besonders nützlich, wenn eine große Menge von Strings nach locale-spezifischen Regeln sortiert werden soll und die Strings vorberechnet in einer Datenbank oder einem Cache gespeichert werden können. Anstatt jeden Vergleich mit collator_compare() durchzuführen, werden die Schlüssel einmalig generiert und anschließend mit Standard-Bytevergleichen sortiert.

Die zurückgegebenen Sortierschlüssel sind Binärstrings und können Null-Bytes enthalten. Sie sollten daher nicht als normale Strings behandelt oder angezeigt werden. Ihre Länge und Zusammensetzung hängen von der Locale und den Collator-Einstellungen ab.

In der objektorientierten Variante steht die Methode Collator::getSortKey() zur Verfügung und verhält sich identisch.

Parameter

Name Typ Default Beschreibung
$object Pflicht Collator Eine Collator-Instanz, die die locale-spezifischen Sortierregeln enthält.
$string Pflicht string Der Eingabestring, für den der Sortierschlüssel berechnet werden soll.

Rückgabewert

Typ
string|false
Beschreibung
Gibt einen binären Sortierschlüssel als String zurück. Im Fehlerfall wird false zurückgegeben.

Beispiele

Locale-korrekte Vorsortierung von Strings

<?php
// Collator für Deutsch erstellen
$collator = collator_create('de_DE');

$woerter = ['Österreich', 'Aachen', 'Übung', 'Zug', 'ähnlich'];

// Sortierschlüssel vorberechnen
$schluessel = [];
foreach ($woerter as $wort) {
    $schluessel[$wort] = collator_get_sort_key($collator, $wort);
}

// Anhand der Schlüssel sortieren (Bytevergleich)
asort($schluessel);

foreach (array_keys($schluessel) as $sortiert) {
    echo $sortiert . PHP_EOL;
}
Aachen ähnlich Österreich Übung Zug

Sortierschlüssel für Datenbankindizierung generieren

<?php
$collator = collator_create('sv_SE'); // Schwedisch

$namen = ['Åke', 'Björn', 'Anders', 'Örjan'];

$eintraege = [];
foreach ($namen as $name) {
    $key = collator_get_sort_key($collator, $name);
    if ($key === false) {
        echo "Fehler beim Generieren des Schlüssels für: $name" . PHP_EOL;
        continue;
    }
    // Schlüssel als Hex speichern (da binär)
    $eintraege[] = [
        'name'       => $name,
        'sort_key'   => bin2hex($key),
    ];
}

// Nach sort_key sortieren (Bytevergleich entspricht Collation-Vergleich)
usort($eintraege, fn($a, $b) => strcmp($a['sort_key'], $b['sort_key']));

foreach ($eintraege as $e) {
    echo $e['name'] . PHP_EOL;
}
Anders Björn Åke Örjan

// Wichtig · Fallstricke

Binäre Ausgabe: Der zurückgegebene Sortierschlüssel ist ein Binärstring und kann Null-Bytes (\0) enthalten. Er ist nicht für die Anzeige geeignet und sollte nicht als regulärer Text behandelt werden. Für die Speicherung empfiehlt sich bin2hex() oder eine Blob-Spalte in der Datenbank.

Locale-Abhängigkeit: Sortierschlüssel sind nur innerhalb derselben Locale und denselben Collator-Einstellungen miteinander vergleichbar. Schlüssel aus verschiedenen Locales dürfen nicht direkt verglichen werden.

Performance: Die Vorberechnung von Sortierschlüsseln lohnt sich vor allem dann, wenn dieselben Strings häufig verglichen werden. Für einmalige Vergleiche ist collator_compare() einfacher.