Um das Thema habe ich mich erfolgreich längere Zeit herumgedrückt – aber jetzt wollte ich es dann doch mal ganz genau wissen: Wie kann ich einen multidimentionalen Array beliebig umsortieren?
Häufig habe ich mit multidimentionalen Arrays zu tun – aber in den meisten Fällen reicht es, wenn ich schon bei der eigentlichen mySQL-Abfrage vorgebe, wie bzw. wonach der Array sortiert sein soll. Inzwischen sind ‚hier‘ aber auch ein paar komplexere geschichten am laufen, und ich will die mySQL-Abfrage nicht für jede abweichende Abfrage anpassen. Stattdessen will ich ‚lediglich‘ den Ergebnis-Array entsprechend bestimmter Vorgaben umsortieren.
Ein Beispiel: meine mySQL-Abfrage liefert mir folgendes Ergebnis:
Array ( [0] => Array ( [id] => 369 [name] => Peter [year] => 1969 ) [1] => Array ( [id] => 368 [name] => Paul [year] => 1975 ) [2] => Array ( [id] => 367 [name] => Mary [year] => 1977 ) )
Nun möchte ich den Array zum Beispiel nicht nach der ID, sondern alphabetisch nach dem Namen sortieren. Dafür kann man den Array folgendermaßen auseinandernehmen und dann mithilfe der PHP-Funktion array_multisort geziehlt umsortieren:
$sortArray = array(); foreach($entryArray as $entry){ foreach($entry as $key=>$value){ if(!isset($sortArray[$key])){ $sortArray[$key] = array(); } $sortArray[$key][] = $value; } } $orderby = "name"; array_multisort($sortArray[$orderby],SORT_ASC,$entryArray); return $entryArray;
in diesem Fall ist $entryArray mein ursprünglicher Array, der das Ergebnis der mySQL-Abfrage beinhaltet. Das sieht vielleicht erst mal etwas kryptisch aus, funktioniert letztendlich aber erstaunlich problemlos. Nach dem Umsortieren bekomme ich also folgenden Array:
Array ( [0] => Array ( [id] => 367 [name] => Mary [year] => 1977 ) [1] => Array ( [id] => 368 [name] => Paul [year] => 1975 ) [2] => Array ( [id] => 369 [name] => Peter [year] => 1969 ) )
Sehr praktisch.
Siehe auch:
- PHP-Handbuch > Funktionsreferenz > … > Array Funktionen > array_multisort