Der Martin: alphabetisches sortieren von mehrdimensionalen arrays

Beitrag lesen

Hallo Rüdiger,

dann selbst rumprobiert und das kam raus:

function sort_abc($a, $b){
   if(strtoupper($a[3]{0}) == "Ä"){$a[3]{0} = "A";}
   if(strtoupper($a[3]{0}) == "Ö"){$a[3]{0} = "O";}
   if(strtoupper($a[3]{0}) == "Ü"){$a[3]{0} = "U";}
   if(strtoupper($b[3]{0}) == "Ä"){$b[3]{0} = "A";}
   if(strtoupper($b[3]{0}) == "Ö"){$b[3]{0} = "O";}
   if(strtoupper($b[3]{0}) == "Ü"){$b[3]{0} = "U";}

okay, du behandelst bei der Sortierung also ä,ö,ü wie a,o,u und kümmerst dich außerdem nicht um Groß/Kleinschreibung. Gut. Aber dass hier zweimal hintereinander genau dasselbe steht, ist dir nicht aufgefallen? Einmal hätte genügt ...

if(strtoupper($a[3]{0}) == strtoupper($b[3]{0})) return 0;
   return (strtoupper($a[3]{0}) > strtoupper($b[3]{0}))?1:-1;

Außerdem vergleichst du immer nur das erste Zeichen deiner Strings. Das heißt, die Wörter "Auspuff", "Anpfiff", "ähnlich", "ätsch" und "aaa" sortieren alle gleichrangig.

hab zwar jetzt nicht mehr die Ä,ä,Ü,ü,Ö,ös am schluss sondern bei den jeweiligen buchstaben aber auch nicht am anfang wo sie hingehören

Was meinst du mit "auch nicht am Anfang"?
Was in deiner Vergleichsfunktion fehlt, ist eine Schleife, die Zeichen für Zeichen durch den String marschiert, bis sie sich an einer Stelle unterscheiden oder einer der beiden Strings zu Ende ist.

äußere
Auspacken
äußere
Auslauf
Auspacken
äußere
Alter

Naja, du sortierst ja auch nicht *innerhalb* der Begriffe, die mit [AaÄä] anfangen. Sonst müsste sich folgende Reihenfolge ergeben, wenn du das Prinzip konsequent weiterführst:

Alter
ändern
Auslauf
Auspacken
Auspacken
äußere
äußere
äußere
Axt

Die Begriffe "Ändern" und "Axt" habe ich noch hinzugefügt, um das Prinzip deutlicher zu machen.

So long,
 Martin

--
Lieber eine Fliege im Porzellanladen
als ein Elefant in der Suppe.