Signatur
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
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);
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".';
}
// 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).