Start · Sprachen · PHP · Referenz · collator_sort

collator_sort

Funktion

Sortiert ein Array mithilfe eines <code>Collator</code>-Objekts unter Berücksichtigung sprachspezifischer Sortierregeln.

seit PHP 5.3.0 Kategorie: string

Signatur

collator_sort(Collator $object, array &$array, int $flags = Collator::SORT_REGULAR): bool

Beschreibung

collator_sort() sortiert ein Array anhand der Vergleichsregeln eines Collator-Objekts. Im Gegensatz zur Standard-PHP-Funktion sort() werden dabei die sprachspezifischen Sortierregeln des gewählten Gebietsschemas (Locale) korrekt berücksichtigt – beispielsweise die Einordnung von Umlauten (ä, ö, ü) im Deutschen oder die Behandlung von Akzentzeichen im Französischen.

Die Funktion arbeitet direkt auf dem übergebenen Array (Übergabe per Referenz) und verändert es in-place. Der Rückgabewert gibt an, ob die Sortierung erfolgreich war. Über den Parameter $flags kann gesteuert werden, ob Elemente als Zeichenketten (Collator::SORT_STRING), numerische Werte (Collator::SORT_NUMERIC) oder automatisch (Collator::SORT_REGULAR) behandelt werden sollen.

Die prozedurale Funktion collator_sort() ist die funktionale Entsprechung zur objektorientierten Methode Collator::sort(). Für die Verwendung ist die PHP-Erweiterung intl erforderlich.

Parameter

Name Typ Default Beschreibung
$object Pflicht Collator Eine Collator-Instanz, die das zu verwendende Gebietsschema und die Sortierregeln definiert.
$array Pflicht array Das zu sortierende Array. Es wird per Referenz übergeben und direkt verändert.
$flags int Collator::SORT_REGULAR Optionaler Sortiertyp. Mögliche Werte: Collator::SORT_REGULAR (automatische Typauswahl), Collator::SORT_STRING (als Zeichenketten vergleichen), Collator::SORT_NUMERIC (als Zahlen vergleichen).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false im Fehlerfall (z. B. wenn das Collator-Objekt ungültig ist).

Beispiele

Deutsche Sortierung mit Umlauten

<?php
// Erstellt einen Collator für das deutsche Gebietsschema
$collator = collator_create('de_DE');

$woerter = ['Zebra', 'Apfel', 'Österreich', 'Banane', 'Ähre', 'Zitrone'];

collator_sort($collator, $woerter);

print_r($woerter);
Array ( [0] => Ähre [1] => Apfel [2] => Banane [3] => Österreich [4] => Zebra [5] => Zitrone )

Numerische Sortierung mit SORT_NUMERIC

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

$werte = ['10 Punkte', '2 Punkte', '20 Punkte', '1 Punkt'];

// Mit SORT_STRING (Standard für Strings)
collator_sort($collator, $werte, Collator::SORT_STRING);
echo "Zeichenketten-Sortierung:\n";
print_r($werte);

// Array zurücksetzen
$werte = ['10 Punkte', '2 Punkte', '20 Punkte', '1 Punkt'];

// Numerisch sortieren
collator_sort($collator, $werte, Collator::SORT_NUMERIC);
echo "Numerische Sortierung:\n";
print_r($werte);
Zeichenketten-Sortierung: Array ( [0] => 1 Punkt [1] => 10 Punkte [2] => 2 Punkte [3] => 20 Punkte ) Numerische Sortierung: Array ( [0] => 1 Punkt [1] => 2 Punkte [2] => 10 Punkte [3] => 20 Punkte )

// Wichtig · Fallstricke

Voraussetzung: Die PHP-Erweiterung intl muss installiert und aktiviert sein. Ohne sie steht weder collator_sort() noch die Klasse Collator zur Verfügung.

Array-Schlüssel: collator_sort() setzt die numerischen Schlüssel des Arrays zurück (ähnlich wie sort()). Sollen die Schlüssel erhalten bleiben, ist collator_asort() zu bevorzugen.

Locale-Einstellungen: Das korrekte Gebietsschema ist entscheidend für das Sortierergebnis. Ein falsches Locale kann zu unerwartetem Verhalten führen. Es empfiehlt sich, das Locale explizit zu setzen, anstatt auf System-Standardwerte zu vertrauen.