Start · Sprachen · PHP · Referenz · collator_set_strength

collator_set_strength

Funktion

Setzt die Kollationsstärke eines <code>Collator</code>-Objekts und bestimmt damit, wie genau Zeichen beim Vergleich unterschieden werden.

seit PHP 5.3.0 Kategorie: string

Signatur

collator_set_strength(Collator $object, int $strength): bool

Beschreibung

collator_set_strength() legt fest, auf welcher Ebene der Unicode Collation Algorithm (UCA) Zeichen beim Sortieren und Vergleichen unterscheidet. Je höher die gewählte Stärke, desto mehr Unterschiede zwischen Zeichen werden berücksichtigt – etwa Groß-/Kleinschreibung oder Akzente.

Die verfügbaren Stärkewerte sind als Konstanten der Klasse Collator definiert: Collator::PRIMARY berücksichtigt nur Basiszeichen, Collator::SECONDARY bezieht Akzente ein, Collator::TERTIARY (Standard) unterscheidet zusätzlich Groß-/Kleinschreibung, Collator::QUATERNARY berücksichtigt auch Interpunktion, und Collator::IDENTICAL erfordert bitgenaue Übereinstimmung auf Codepoint-Ebene.

Die Funktion ist besonders nützlich, wenn Textdaten aus verschiedenen Sprachen verglichen oder sortiert werden sollen und die Unterscheidungsgenauigkeit gezielt gesteuert werden muss – z. B. eine akzentunabhängige Suche mit Collator::PRIMARY oder eine vollständig exakte Sortierung mit Collator::IDENTICAL.

Die prozedurale Variante collator_set_strength() ist äquivalent zur objektorientierten Methode Collator::setStrength().

Parameter

Name Typ Default Beschreibung
$object Pflicht Collator Eine Collator-Instanz, die zuvor mit collator_create() oder new Collator() erzeugt wurde.
$strength Pflicht int Die gewünschte Kollationsstärke. Erlaubte Werte sind: Collator::PRIMARY (0), Collator::SECONDARY (1), Collator::TERTIARY (2), Collator::QUATERNARY (3) und Collator::IDENTICAL (15).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false wenn die Stärke nicht gesetzt werden konnte (z. B. bei ungültigem Wert oder fehlerhaftem Collator-Objekt).

Beispiele

Akzentunabhängige Sortierung mit PRIMARY-Stärke

<?php
$collator = collator_create('de_DE');

// PRIMARY ignoriert Akzente und Groß-/Kleinschreibung
collator_set_strength($collator, Collator::PRIMARY);

$woerter = ['Äpfel', 'apfel', 'Apfel', 'äpfel'];
collator_sort($collator, $woerter);

print_r($woerter);
Array ( [0] => Äpfel [1] => apfel [2] => Apfel [3] => äpfel )

Vergleich mit IDENTICAL-Stärke für exakte Übereinstimmung

<?php
$collator = collator_create('de_DE');

// IDENTICAL unterscheidet selbst Unicode-Normalisierungsvarianten
collator_set_strength($collator, Collator::IDENTICAL);

$vergleich = collator_compare($collator, 'Straße', 'Strasse');

if ($vergleich === 0) {
    echo 'Strings sind identisch.';
} elseif ($vergleich < 0) {
    echo '"Straße" kommt vor "Strasse".';
} else {
    echo '"Strasse" kommt vor "Straße".';
}
"Straße" kommt vor "Strasse".

// Wichtig · Fallstricke

Hinweis: Die Verwendung von Collator::IDENTICAL kann die Performance bei großen Datensätzen deutlich beeinträchtigen, da ein vollständiger Codepoint-Vergleich durchgeführt wird. Es empfiehlt sich, diese Stärke nur dann zu wählen, wenn sie wirklich benötigt wird.

Die Stärke Collator::QUATERNARY wird in der Praxis selten benötigt und ist hauptsächlich für Sprachen relevant, die Leerzeichen und Interpunktion im Sortierverhalten explizit berücksichtigen müssen (z. B. Japanisch).