Start · Sprachen · PHP · Referenz · collator_sort_with_sort_keys

collator_sort_with_sort_keys

Funktion

Sortiert ein Array mit einem <code>Collator</code>-Objekt und internen Sortierschlüsseln für maximale Sortiergeschwindigkeit.

seit PHP 5.3.0 Kategorie: string

Signatur

collator_sort_with_sort_keys(Collator $object, array &$array): bool

Beschreibung

collator_sort_with_sort_keys sortiert ein übergebenes Array mithilfe eines Collator-Objekts unter Verwendung von ICU-Sortierschlüsseln. Diese Schlüssel werden intern vorab generiert, sodass der eigentliche Vergleich sehr effizient per Binärvergleich erfolgt – was diese Funktion deutlich schneller als collator_sort macht, wenn große Arrays sortiert werden.

Die Funktion entspricht dem prozeduralen Pendant zur Methode Collator::sortWithSortKeys(). Das Array wird direkt (in-place) verändert und die ursprünglichen Schlüssel (Indizes) werden dabei nicht beibehalten – das Array wird neu nummeriert.

Sortierschlüssel sind besonders nützlich, wenn dasselbe Array mehrfach oder in verschiedenen Kontexten sortiert werden muss, da der Aufwand für die Schlüsselgenerierung nur einmal anfällt. Für einmalige Sortierungen mit kleineren Arrays bietet sich collator_sort als einfachere Alternative an.

Diese Funktion ist Teil der Intl-Extension und setzt voraus, dass diese Extension aktiviert ist (extension=intl in der php.ini).

Parameter

Name Typ Default Beschreibung
$object Pflicht Collator Ein Collator-Objekt, das die Sprach- und Sortierregeln definiert (z. B. erstellt mit collator_create('de_DE')).
$array Pflicht array Das zu sortierende Array mit Zeichenketten. Das Array wird als Referenz übergeben und direkt verändert.

Rückgabewert

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

Beispiele

Deutschsprachige Wörter mit Umlauten korrekt sortieren

<?php
$words = ['Zebra', 'Äpfel', 'orange', 'Birne', 'Übung', 'apfel'];

$collator = collator_create('de_DE');

if (collator_sort_with_sort_keys($collator, $words)) {
    foreach ($words as $word) {
        echo $word . PHP_EOL;
    }
} else {
    echo 'Sortierung fehlgeschlagen.';
}
apfel Äpfel Birne orange Übung Zebra

Vergleich der Performance mit großem Array

<?php
// Beispiel: performantes Sortieren eines großen Arrays
$data = [];
for ($i = 0; $i < 10000; $i++) {
    $data[] = 'Wort_' . rand(1, 99999);
}

$collator = collator_create('de_DE');

$start = microtime(true);
collator_sort_with_sort_keys($collator, $data);
$duration = microtime(true) - $start;

echo 'Sortierung abgeschlossen in: ' . round($duration * 1000, 2) . ' ms' . PHP_EOL;
echo 'Erstes Element: ' . $data[0] . PHP_EOL;
echo 'Letztes Element: ' . $data[count($data) - 1] . PHP_EOL;
Sortierung abgeschlossen in: X ms Erstes Element: Wort_... Letztes Element: Wort_...

// Wichtig · Fallstricke

Hinweis zur Schlüsselerhaltung: Das Array wird nach der Sortierung neu nummeriert (0, 1, 2, …). Ursprüngliche numerische oder String-Schlüssel gehen verloren. Wenn die Schlüsselzuordnung erhalten bleiben soll, sollte stattdessen collator_asort verwendet werden.

Performance: Für sehr große Arrays mit Umlauten oder Sonderzeichen ist collator_sort_with_sort_keys deutlich schneller als collator_sort, da der Binärvergleich der Sortierschlüssel wesentlich günstiger ist als wiederholte Unicode-Vergleiche.

Extension: Die Funktion steht nur zur Verfügung, wenn die intl-Extension installiert und aktiviert ist. Prüfen lässt sich dies mit extension_loaded('intl').