Kategorie-Archiv: PHP

PHP Tipps und Tricks

PHP Mehrdimensionale Arrays

Mehrdimensionale Arrays zu sortieren bereitet gerade Einsteiger immer wieder Schwierigkeiten.
Zuallererst bauen wir uns ein Array auf:

$array   = array();
$array[] = array('vorname'=> 'Hans', 
                 'name'   => 'Meier', 
                 'plz'    => '10119', 
                 'ort'    => 'Berlin');
 
$array[] = array('vorname'=> 'Egon', 
                 'name'   => 'Schmidt', 
                 'plz'    => '01067', 
                 'ort'    => 'Dresden');
 
$array[] = array('vorname'=> 'Franz', 
                 'name'   => 'Müller',
                 'plz'    => '50670', 
                 'ort'    => 'Köln');

Zur Vorbereitung auf die Sortierung, erstellen wir im nächsten Schritt ein Hilfsarray.

foreach ($array as $key => $value)
{
    $hilfsarray_vorname[$key]  =  $value['vorname'];
    $hilfsarray_name[$key]     =  $value['name'];
    $hilfsarray_plz[$key]      =  $value['plz'];
    $hilfsarray_ort[$key]      =  $value['ort'];
}

Einfache Sortierung

Die Variable $array wird direkt sortiert.

// sortieren nach Vorname
array_multisort($hilfsarray_vorname, SORT_ASC, SORT_NATURAL, $array);
 
// sortieren nach Name
array_multisort($hilfsarray_name, SORT_ASC, SORT_NATURAL, $array);
 
// sortieren nach Plz
array_multisort($hilfsarray_plz, SORT_ASC, SORT_NUMERIC, $array);
 
// sortieren nach Ort
array_multisort($hilfsarray_ort, SORT_ASC, SORT_NATURAL, $array);

Mehrfache Sortierung

// sortieren nach Vorname aufsteigend und Name absteigend
array_multisort($hilfsarray_vorname, SORT_ASC, SORT_NATURAL, $hilfsarray_name, SORT_DESC, SORT_NATURAL, $array);
 
// sortieren nach Plz absteigend und Ort aufsteigend
array_multisort($hilfsarray_plz, SORT_DESC, SORT_NUMERIC, $hilfsarray_ort, SORT_ASC, SORT_NATURAL, $array);

Hinweis

PHP unterstützt erst ab Version 5.4 das FLAG „SORT_NATURAL“. Als Workaround bietet es sich an, bei der Erzeugung wie folgt einzugreifen:

foreach ($array as $key => $value)
{
    $hilfsarray_vorname[$key]  =  strtolower($value['vorname']);
    $hilfsarray_name[$key]     =  strtolower($value['name']);
    $hilfsarray_plz[$key]      =  strtolower($value['plz']);
    $hilfsarray_ort[$key]      =  strtolower($value['ort']);
}

Alternativ kann auch die Funktion „array_map“ ein komplettes Array in Kleinbuchstaben umwandeln:

$hilfsarray_vorname = array_map('strtolower', $hilfsarray_vorname);