Sven Rautenberg: usort() - Rettung naht!

Beitrag lesen

Moin!

ich möchte eine Personenliste mittels usort sortieren.

Den Code dafür zeigst du aber nicht. :)

  

> $person[x] = Array ( [0] => Vorname  
>                      [1] => Nachname  
>                      [2] => Funktion )  

Numerische Indices scheinen mir irgendwie unpraktisch für die Aufgabe zu sein.

Ich hätte es so gemacht:

  
$person[x] = Array ( ['vorname'] => "Ein Vorname",  
                     ['nachname'] => "Ein Nachname",  
                     ['funktion'] => "eine Funktion" )  

Ändert an der grundsätzlichen Sortierung aber nichts.

Nun soll in der Callback-Funktion eigentlich nur nach Nachnamen und Vornamen sortiert werden, aber bei einer bestimmten Funktion der Person soll diese ganz

nach oben in der Liste.

Du hast also eine ganz normale dreistufige Sortierung:
Stufe 1: Spezielle Funktionen ganz nach vorne, alles andere dahinter.
Stufe 2: Innerhalb der Stufe "Funktion" die Nachnamen alphabetisch von vorn bis hinten.
Stufe 3: Innerhalb der Stufe "Nachname" die Vornamen alphabetisch von vorn bis hinten.

  

> function sonstige_sortieren($person1, $person2)  
>    {  
>    // Nachnamen vergleichen  
>    if($person1[1] != $person2[1]) return strcmp($person1[1], $person2[1]);  
>    //Vornamen vergleichen  
>    if($person1[0] != $person2[0]) return strcmp($person1[2], $person2[0]);  
  
// Hier ist ein Tippfehler, du vergleichst Index 2 und 0 miteinander.  
  

>    return 0;  
>    }  
  
// Außerdem: Diese Funktion realisiert eine zweistufige Sortierung doch schon. Warum nicht Dreistufigkeit einbauen?  
  
// Dann bräuchtest du auch dies hier nicht mehr:  

> function spezial_sortieren($person1, $person2)  
>    {  
>    if(substr_count($person1[2], "Funktion") > 0 || substr_count($person1[2], "Funktion") > 0)  
>       {  
>       // "Funktionär" dabei?  
>       if(substr_count($person1[2], "Funktion") > 0 && substr_count($person2[2], "Funktion") < 0) return 1; // ja, ersterer  
>       if(substr_count($person1[2], "Funktion") < 0 && substr_count($person2[2], "Funktion") > 0) return -1; // ja, zweiterer  
>       }  
>    // weiter vergleichen  
>    return sonstige_sortieren($person1, $person2);  
>    }  

- Sven Rautenberg

--
My sssignature, my preciousssss!