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