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: $array['key'] = 'value'; basieren.
  • Die Korrelation zwischen den Schlüsseln und den Werten wird nach der Sortierung gepflegt, was bedeuted, dass die Schlüssel numerisch (0,1,2 ...) zurückgesetzt werden.
  • Die Reihenfolge der Sortierung: Alphabetisch, Niedrig nach Hoch (aufsteigend), Hoch zu Niedrig (absteigend), numerisch, natürlich, zufällig oder Benutzerdefiniert.
  • Hinweis: Alle Sortierungen werden direkt auf die Array-Variable selbst angewendet, entgegen der Rückgabe eines neu sortierten Arrays.
  • Wenn eine dieser Sortierfunktionen zwei Schlüssel/Werte als gleich ausstellt, dann ist die Ordnung undefiniert (die Sortierung ist nicht stabil).

Sortierfunktionsattribute
Funktionsname Sortiert nach Pflegt Schlüssel Assoziation Art der Sortierung Ähnliche Funktionen
array_multisort() Wert Assoziativ: Ja, Numerisch: 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 asort()
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 add a note

User Contributed Notes 3 notes

up
131
"Matthew Rice"
7 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
25
oculiz at gmail dot com
9 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.
up
0
Hayley Watson
3 years ago
Stabilizing the sort functions (in this case, usort).

<?php
function stable_usort(&$array, $cmp)
{
   
$i = 0;
   
$array = array_map(function($elt)use(&$i)
    {
        return [
$i++, $elt];
    },
$array);
   
usort($array, function($a, $b)use($cmp)
    {
        return
$cmp($a[1], $b[1]) ?: ($a[0] - $b[0]);
    });
   
$array = array_column($array, 1);
}
?>

Tags each array element with its original position in the array so that when the comparison function returns 0 the tie can be broken to put the earlier element first.
To Top