Michael: Array nach mehreren Feldern sortieren

Beitrag lesen

Hallo und vielen Dank an dedlfix!

Das ist in mehr oder weniger Pseudocode das was du suchst

wenn 0 == $ergebnis = strcmp($a['x'], $b['x'])
    wenn 0 == $ergebnis = strcmp($a['y'], $b['y'])
      return strcmp($a['z'], $b['z']);
    else
      return $ergebnis;
  else
    return $ergebnis;

Oder etwas abgekürzt:

wenn 0 == $ergebnis = strcmp($a['x'], $b['x'])
    wenn 0 == $ergebnis = strcmp($a['y'], $b['y'])
      return strcmp($a['z'], $b['z']);
  return $ergebnis;

Dieser Anstoß hat genügt, den Rest habe ich ebenfalls dankend zur Kenntnis genommen.

Hier nun die fertige Lösung (vielleicht kann es jemand gebrauchen und hat es dann damit etwas leichter und schneller als ich)
Im folgenden Beispiel werden die Adressen nach "nachname", "ort" und "strasse" sortiert.

$kunde = array(
"0" => array("vorname"=>"Hans",  "nachname"=>"Michaelis", "strasse"=>"Nussweg 12",  "ort"=>"Hamburg"),
"1" => array("vorname"=>"Manuela",  "nachname"=>"Michaelis", "strasse"=>"Bahnhofstr. 34", "ort"=>"Berlin"),
"2" => array("vorname"=>"Klaus",  "nachname"=>"Michaelis", "strasse"=>"Mühlweg 8",  "ort"=>"Hamburg"),
"3" => array("vorname"=>"Sabine",  "nachname"=>"Jabst",   "strasse"=>"Flurweg 8",   "ort"=>"Dresden"),
"4" => array("vorname"=>"Gerhard",  "nachname"=>"Blum",   "strasse"=>"Wiesenweg 77",  "ort"=>"Berlin"),
"5" => array("vorname"=>"Marion",  "nachname"=>"Michaelis", "strasse"=>"Ahornweg 12",  "ort"=>"Hamburg")
);

echo "<pre>";
print_r($kunde);
echo "</pre>";

Function cmp_adresse($a, $b )
 {
 if (0 == $x = strcmp($a['nachname'], $b['nachname']))
  {
  if (0 == $x = strcmp($a['ort'], $b['ort']))
   {return strcmp($a['strasse'], $b['strasse']);}
  }
 return $x;
 }

usort($kunde, 'cmp_adresse') ;

echo "<pre>";
 print_r( $kunde );
echo "</pre>";

Für Verbesserungs- und / oder Optimierungsvorschläge bin ich jederzeit offen.

Danke für die Unterstützung

Grüße Michael