Start · Sprachen · PHP · Referenz · krsort

krsort

Funktion

Sortiert ein Array nach seinen Schlüsseln in absteigender Reihenfolge und behält dabei die Zuordnung zwischen Schlüsseln und Werten bei.

seit PHP 4.0.0 Kategorie: array

Signatur

krsort(array &$array, int $flags = SORT_REGULAR): true

Beschreibung

krsort() sortiert ein assoziatives Array nach seinen Schlüsseln in absteigender Reihenfolge (Z→A bzw. 9→0). Im Gegensatz zu rsort() bleiben die Schlüssel-Wert-Zuordnungen erhalten, sodass nach der Sortierung jeder Wert noch unter seinem ursprünglichen Schlüssel erreichbar ist. Das Array wird direkt verändert (In-Place-Sortierung).

Die Funktion ist besonders nützlich, wenn ein assoziatives Array mit Textkennungen oder numerischen IDs als Schlüssel in umgekehrter alphabetischer oder numerischer Reihenfolge ausgegeben werden soll – beispielsweise bei der Darstellung von Jahreszahlen, Versionen oder Kategorien in absteigender Reihenfolge.

Das Verhalten der Sortierung lässt sich über den Parameter $flags anpassen. So kann mit SORT_NATURAL eine natürliche Sortierung (z. B. item10 nach item9) erzwungen werden, oder mit SORT_STRING eine rein zeichenbasierte Sortierung.

Seit PHP 8.0 gibt die Funktion immer true zurück. In älteren PHP-Versionen konnte sie theoretisch false zurückgeben, was in der Praxis jedoch kaum auftrat.

Parameter

Name Typ Default Beschreibung
$array Pflicht array Das zu sortierende Array, das per Referenz übergeben wird und direkt verändert wird.
$flags int SORT_REGULAR Optionale Sortier-Flags, die das Vergleichsverhalten steuern. Mögliche Werte: SORT_REGULAR, SORT_NUMERIC, SORT_STRING, SORT_LOCALE_STRING, SORT_NATURAL, SORT_FLAG_CASE.

Rückgabewert

Typ
true
Beschreibung
Gibt seit PHP 8.0 immer true zurück. In früheren Versionen wurde bool zurückgegeben.

Beispiele

Assoziatives Array nach Schlüsseln absteigend sortieren

<?php
$preise = [
    'Banane'  => 0.49,
    'Apfel'   => 0.79,
    'Zitrone' => 0.99,
    'Mango'   => 1.49,
];

krsort($preise);

foreach ($preise as $frucht => $preis) {
    echo "$frucht: $preis EUR\n";
}
Zitrone: 0.99 EUR Mango: 1.49 EUR Banane: 0.49 EUR Apfel: 0.79 EUR

Jahreszahlen als Schlüssel absteigend sortieren (neueste zuerst)

<?php
$umsaetze = [
    2021 => 45000,
    2023 => 72000,
    2019 => 38000,
    2022 => 61000,
];

krsort($umsaetze);

foreach ($umsaetze as $jahr => $umsatz) {
    echo "$jahr: $umsatz EUR\n";
}
2023: 72000 EUR 2022: 61000 EUR 2021: 45000 EUR 2019: 38000 EUR

Natürliche Sortierung der Schlüssel mit SORT_NATURAL absteigend

<?php
$dateien = [
    'datei10' => 'Zehnter Eintrag',
    'datei2'  => 'Zweiter Eintrag',
    'datei1'  => 'Erster Eintrag',
    'datei20' => 'Zwanzigster Eintrag',
];

krsort($dateien, SORT_NATURAL);

foreach ($dateien as $key => $value) {
    echo "$key: $value\n";
}
datei20: Zwanzigster Eintrag datei10: Zehnter Eintrag datei2: Zweiter Eintrag datei1: Erster Eintrag

// Wichtig · Fallstricke

Reihenfolge bei gleichen Schlüsseln: Da Schlüssel in einem PHP-Array eindeutig sind, treten keine Gleichstände auf – jeder Schlüssel existiert nur einmal.

Gegenstück: ksort() sortiert aufsteigend nach Schlüsseln. Für absteigende Sortierung nach Werten unter Erhalt der Schlüssel dient arsort().

Numerische Schlüssel: Bei rein numerisch indizierten Arrays (0, 1, 2, …) verhält sich krsort() wie eine umgekehrte numerische Schlüsselsortierung. Soll nur die Reihenfolge ohne Schlüsselerhalt umgekehrt werden, ist array_reverse() oft besser geeignet.