Multidimensionales Array sortieren
Aus php bar
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.
1 // Vergleichsfunktion 2 function vergleich($wert_a, $wert_b) 3 { 4 // Sortierung nach dem zweiten Wert des Array (Index: 1) 5 $a = $wert_a[1]; 6 $b = $wert_b[1]; 7 8 if ($a == $b) { 9 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

