PHP: Multidimensionalen Array beliebig umsortieren (array_multisort)

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert