PHP 8.4.2 Released!

Arrays sortieren

PHP bietet mehrere Funktionen, um Arrays zu sortieren. Diese Seite beinhaltet eine Übersicht über diese Funktionen.

Die Hauptunterschiede:

  • Einige Sortierungen basieren auf den Array-Schlüsseln, während andere auf den Werten basieren: $array['schluessel'] = 'wert';.
  • Einige Sortierungen behalten die Korrelation zwischen Schlüsseln und Werten bei, andere nicht, was bedeuten kann, dass die Schlüssel numerisch neu zugewiesen werden (0,1,2 ...)
  • Die Reihenfolge der Sortierung: Alphabetisch, aufsteigend (niedrig nach hoch), absteigend (hoch zu niedrig), natürlich, zufällig oder benutzerdefiniert.
  • Hinweis: Alle Sortierungen werden direkt auf die Array-Variable selbst angewendet, statt ein neues sortiertes Array zurückzugeben.
  • Wenn eine dieser Sortierfunktionen zwei Schlüssel/Werte als gleich bewertet, wird die ursprüngliche Reihenfolge beibehalten. Vor PHP 8.0.0 war deren Reihenfolge undefiniert (die Sortierung war nicht stabil).

Sortierfunktions-Attribute
Funktionsname Sortiert nach Pflegt Schlüssel Assoziation Art der Sortierung Ähnliche Funktionen
array_multisort() Wert string-Schlüssel: ja, int-Schlüssel: nein erste Array- oder Sortieroptionen array_walk()
asort() Wert ja aufsteigend arsort()
arsort() Wert ja absteigend asort()
krsort() Schlüssel ja absteigend ksort()
ksort() Schlüssel ja aufsteigend krsort()
natcasesort() Wert ja natürlich, beachtet Groß-/Kleinschreibung natsort()
natsort() Wert ja natürlich natcasesort()
rsort() Wert nein absteigend sort()
shuffle() Wert nein zufällig array_rand()
sort() Wert nein aufsteigend rsort()
uasort() Wert ja benutzerdefiniert uksort()
uksort() Schlüssel ja benutzerdefiniert uasort()
usort() Wert nein benutzerdefiniert uasort()

add a note

User Contributed Notes 2 notes

up
142
"Matthew Rice"
11 years ago
While this may seem obvious, user-defined array sorting functions ( uksort(), uasort(), usort() ) will *not* be called if the array does not have *at least two values in it*.

The following code:

<?php

function usortTest($a, $b) {
var_dump($a);
var_dump($b);
return -
1;
}

$test = array('val1');
usort($test, "usortTest");

$test2 = array('val2', 'val3');
usort($test2, "usortTest");

?>

Will output:

string(4) "val3"
string(4) "val2"

The first array doesn't get sent to the function.

Please, under no circumstance, place any logic that modifies values, or applies non-sorting business logic in these functions as they will not always be executed.
up
24
oculiz at gmail dot com
13 years ago
Another way to do a case case-insensitive sort by key would simply be:

<?php
uksort
($array, 'strcasecmp');
?>

Since strcasecmp is already predefined in php it saves you the trouble to actually write the comparison function yourself.
To Top