Multidimensionales Array sortieren

Aus php bar

Wechseln zu: Navigation, Suche

Das Sortieren von Multidimensionalen Arrays ist ein oft gefragter Problemfall. Für die Sortierung von Multidimensionale Arrays stehen verschiedene Funktionen zur Verfügung.

Jeder diese Funktionen hat eigene Vor- und Nachteile, und sollten je nach Anwendungsgebrauch eingesetzt werden.

Außerdem muss man zwischen zwei verschiedenen Aufbau-Arten von Arrays unterscheiden: zeilenbasiert und spaltenbasiert. Beim Zeilen-basierten Array enthält jedes Element der 1. Dimension des Arrays alle Werte einer Zeile - beim Spalten-basierten alle Werte einer Spalte.

Inhaltsverzeichnis

Zeilenorientierte Arrays

usort()

usort() benutzt eine benutzerdefinierte Vergleichsfunktion, nach der ein Array (oder auch multidimensionales Array) sortiert wird. Dadurch werden die Flags überflüssig, da man eine eigene Funktion bereitstellen muss, die allerdings mehr Möglichkeiten bietet, nach der man vergleichen kann.

 // Vergleichsfunktion
 function vergleich($wert_a, $wert_b) 
 {
     // Sortierung nach dem zweiten Wert des Array (Index: 1)
     $a = $wert_a[1];
     $b = $wert_b[1];
 
     if ($a == $b) {
         return 0;
10     }
11 
12     return ($a < $b) ? -1 : +1;
13 }
14 
15 // zu sortierendes, multidimensionales Array
16 $array = array(
17     array('Hund',  '3', 4525),
18     array('Katze', '2', 3232),
19     array('Maus',  '5', 1353),
20     array('Pferd', '1', 3357),
21     array('Vogel', '4', 9312)
22 );
23 
24 // Aufruf von usort() mit dem Array, das sortiert werden soll und dem Namen der Vergleichsfunktion
25 usort($array, 'vergleich');
Anmerkung: Die Vergleichsfunktion in diesem Beispiel benutzt beim Rückgabewert einen Trinitäts-Operator.

Für die Verwendung von array_multisort() müsste das zu sortierende Array erst einmal umgebaut werden, und danach wieder zurückgebaut werden.

Spaltenorientierte Arrays

array_multisort()

array_multisort() kann zum Sortieren von multidimensionalen Arrays, aber auch zum Sortieren von mehreren Arrays, benutzt werden. Das Array wird als Tabelle behandelt und die Sortierung ist Vergleichbar mit dem ORDER BY-Ausdruck in SQL. Daher verlangt die Sortierung allerdings einen speziellen Aufbau des Arrays.

Wer das Ergebnis seiner Datenbankabfrage mit dieser Funktion sortieren will, sollte sich vorher noch einmal seinen SQL-Befehl anschauen, ob die Sortierung nicht gleich hier ablaufen kann.

Diese Funktion erwartet Flags für Sortierreihenfolgen (SORT_ASC, SORT_DESC) und Sortiertypen (SORT_REGULAR, SORT_NUMERIC, SORT_STRING).

1 // zu sortierendes, multidimensionales Array
2 $array = array(
3     'id'      => array('3', '2', '5', '1', '4', ),
4     'rasse'   => array('Hund', 'Katze', 'Maus', 'Pferd', 'Vogel', ),
5     'tier_id' => array(4525, 3232,  1353, 3357, 9312, ),
6 );
7 
8 // Aufruf von array_multisort() mit dem Array, das sortiert werden soll und den entsprechenden Flags
9 array_multisort($array['id'], $array['rasse'], $array['tier_id']);


Siehe auch: www.php.net/usort
Siehe auch: www.php.net/array_multisort
Persönliche Werkzeuge