Signatur
Beschreibung
array_multisort() ermöglicht es, mehrere Arrays auf einmal zu sortieren, wobei die Reihenfolge der Elemente eines Arrays als Sortierkriterium für alle weiteren übergebenen Arrays gilt. Dies ist besonders nützlich, um tabellenartige Datensätze (z. B. Ergebnismengen aus Datenbanken) nach einer oder mehreren Spalten zu sortieren, ähnlich wie ORDER BY in SQL.
Die Funktion verändert die übergebenen Arrays direkt (in-place). Nach dem Pflicht-Array können optional die Sortierrichtung (SORT_ASC oder SORT_DESC) und Sortier-Flags (SORT_REGULAR, SORT_NUMERIC, SORT_STRING, SORT_NATURAL, SORT_LOCALE_STRING, SORT_FLAG_CASE) angegeben werden. Danach können beliebig viele weitere Arrays mit je eigenen Parametern folgen.
Beim Sortieren mehrdimensionaler Arrays extrahiert man häufig zunächst eine Spalte mit array_column(), sortiert diese und übergibt abschließend das Ursprungs-Array, damit es entsprechend umsortiert wird. Schlüssel-Zuordnungen bleiben nicht erhalten (numerische Schlüssel werden neu indiziert), assoziative Schlüssel werden hingegen beibehalten.
Wichtig: Alle übergebenen Arrays müssen dieselbe Anzahl von Elementen besitzen, andernfalls gibt die Funktion false zurück und die Arrays bleiben unverändert.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $array1 Pflicht | array | Das erste zu sortierende Array. Wird als Referenz übergeben und direkt verändert. | |
| $array1_sort_order | int | SORT_ASC | Sortierrichtung für array1: SORT_ASC (aufsteigend) oder SORT_DESC (absteigend). |
| $array1_sort_flags | int | SORT_REGULAR | Sortier-Flags für array1, z. B. SORT_REGULAR, SORT_NUMERIC, SORT_STRING, SORT_NATURAL, SORT_LOCALE_STRING oder SORT_FLAG_CASE. |
| $rest | mixed | Weitere Arrays (ebenfalls als Referenz) sowie optionale Sortierrichtungs- und Flag-Parameter, die jeweils dem direkt vorangehenden Array zugeordnet werden. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn die Arrays unterschiedliche Längen haben).Beispiele
Zwei Arrays synchron sortieren
<?php
$namen = ['Charlie', 'Alice', 'Bob'];
$alter = [30, 25, 28];
array_multisort($namen, SORT_ASC, SORT_STRING, $alter);
print_r($namen);
print_r($alter);
Mehrdimensionales Array nach mehreren Spalten sortieren
<?php
$personen = [
['name' => 'Charlie', 'abteilung' => 'IT', 'gehalt' => 3200],
['name' => 'Alice', 'abteilung' => 'HR', 'gehalt' => 4100],
['name' => 'Bob', 'abteilung' => 'IT', 'gehalt' => 2900],
['name' => 'Diana', 'abteilung' => 'HR', 'gehalt' => 3800],
];
// Erst nach Abteilung (ASC), dann nach Gehalt (DESC) sortieren
$abteilung = array_column($personen, 'abteilung');
$gehalt = array_column($personen, 'gehalt');
array_multisort(
$abteilung, SORT_ASC, SORT_STRING,
$gehalt, SORT_DESC, SORT_NUMERIC,
$personen
);
foreach ($personen as $p) {
echo "{$p['abteilung']} | {$p['name']} | {$p['gehalt']}\n";
}
Natürliche Sortierung (SORT_NATURAL) für Dateinamen
<?php
$dateien = ['bild10.png', 'bild2.png', 'bild1.png', 'bild20.png'];
array_multisort($dateien, SORT_ASC, SORT_NATURAL);
print_r($dateien);
// Wichtig · Fallstricke
Schlüssel-Verhalten: Numerische Schlüssel werden nach dem Sortieren neu indiziert (beginnend bei 0). String-Schlüssel (assoziative Arrays) bleiben erhalten. Soll ein assoziatives Array sortiert werden, während die Schlüssel-Wert-Bindung erhalten bleibt, sollte alternativ uasort() oder usort() in Kombination mit einer benutzerdefinierten Vergleichsfunktion eingesetzt werden.
Gleiche Werte: Bei identischen Werten in der primären Sortierspalte entscheidet die Reihenfolge des nachfolgend übergebenen Arrays (sekundäres Sortierkriterium). Die ursprüngliche Reihenfolge gleichwertiger Elemente wird nicht zwingend beibehalten (instabile Sortierung in PHP < 8.0; seit PHP 8.0 ist die interne Sortierung stabil).
Performance: Bei sehr großen Datensätzen kann es effizienter sein, usort() mit einer Closure zu verwenden, da array_multisort() intern mehrere Hilfskopien der Arrays anlegt.