PHP selbst verfügt über eine Funktion zum Sortieren mehrdimensionaler Arrays.
bool array_multisort (array $ar1 [, Mixed $arg [, Mixed $... [, Array $... ]]] )
Das Folgende ist eine Beschreibung der Funktion array_multisort im Handbuch:
array_multisort() kann verwendet werden, um mehrere Arrays gleichzeitig zu sortieren oder um mehrdimensionale Arrays nach einer bestimmten Dimension oder mehreren Dimensionen zu sortieren.
Assoziative (String-)Schlüsselnamen bleiben unverändert, numerische Schlüsselnamen werden jedoch neu indiziert.
Das Eingabearray wird als Tabellenspalte behandelt und nach Zeilen sortiert – dies ähnelt der Funktionalität der ORDER BY-Klausel von SQL. Das erste Array ist das zu sortierende Hauptarray. Wenn beim Vergleich festgestellt wird, dass die Zeilen (Werte) im Array gleich sind, werden sie nach der Größe des entsprechenden Werts im nächsten Eingabearray usw. sortiert.
Wie wir dem Handbuch entnehmen können, besteht die mehrdimensionale Sortierung von PHP darin, das erste Array zu sortieren und die nachfolgende Reihenfolge anzupassen. Ein Array wie dieses:
array( 'id' => array(1,3,2),
'data'=>array('a','c', 'b'))
Führen Sie einfach eine mehrdimensionale Sortierung nach ID durch und fertig. Aber oft sieht das Array, das wir erstellen, so aus:
array(
array('id'=>1,'data'=>'a'),
array( ' id'=>3,'data'=>'c'),
array('id'=>2,'data'=>'b')
);
Die Elemente des Arrays sind in Zeilen angeordnet und müssen nach einer der Spalten sortiert werden. PHP scheint keine der Matrixtransposition ähnliche Funktion bereitzustellen, sodass array_multisort nicht direkt für die mehrdimensionale Sortierung verwendet werden kann. Sie müssen jedoch zunächst nur die sortierte Spalte extrahieren und sie als ersten Parameter an array_multisort übergeben.
function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){ if(is_array($multi_array)){ foreach ($multi_array as $row_array){ if(is_array($row_array)){ $key_array[] = $row_array[$sort_key]; }else{ return -1; } } }else{ return -1; } array_multisort($key_array,$sort,$multi_array); return $multi_array; }