echo $begrüßung;
Einen Vergleich mit strcmp() hast du ja schon in deiner benutzerdefinierten Vergleichsfunktion verwendet. Du darfst nun nur nicht das Ergebnis sofort zurückgeben sondern musst im Falle von Gleichheit mit dem nächsten Vergleich weitermachen.
Ich hatte mir gedacht so sollte es gehen, tut es aber leider nicht:
Du denkst anscheinend viel zu umständlich. Deine Vergleichsfunktion bekommt zwei der Datensätze übergeben. Wenn bei beiden das erste Kriterium übereinstimmt, reicht es, mit einem weiteren strcmp() das zweite Kriterium zu vergleichen. Du musst dazu weder ein neues Array anlegen, noch eine eigene Vergleichsfunktion schreiben, und dieses Array auch nicht sortieren lassen, wobei du das Ergebnis dessen ignorierst.
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;
Allgemeine Anmerkungen:
Function sortiere_kunde(&$a)
{
Function cmp_array_strasse ($a, $b)
Das Schachteln von Funktionsdefinitionen bringt bei mehrfachem Aufruf der äußeren Funktion außer Ärger keine Vorteile. Eine Funktion wird immer global angelegt.
$x=0; $x=strcmp($a["ort"], $b["ort"]);
Sicher ist sicher? Die Zuweisung des Ergebnisses von strcmp() zu $x findet in jedem Fall statt. Die vorherige Zuweisung $x=0; wird damit ungenutzt überschrieben.
Was ist daran falsch?
Die tatsächliche Funktionsweise (auch selbst geschriebenen) Codes versteht man meist dadurch besser, dass man Kontrollausgaben einbaut und so das Verhalten der Variablen und die Ergebnisse von Ausdrücken überwacht.
echo "$verabschiedung $name";