Felix Riesterer: usort() - bisher nur leichte Verbesserungen

Beitrag lesen

Lieber Sven,

Danke für Deine Antwort! Einige Deiner Empfehlungen habe ich jetzt umgesetzt. War zwar eine tiefergehende Modifikation meines Codes, aber es hat sich sicherlich schon gelohnt!

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

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

Naja, ich dachte das wäre klar: `usort($person, "speziel_sortieren")`{:.language-php}  
  
  

> Numerische Indices scheinen mir irgendwie unpraktisch für die Aufgabe zu sein.  
>   
> Ich hätte es so gemacht:  
> ~~~php
  

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

Schon umgesetzt!

Ändert an der grundsätzlichen Sortierung aber nichts.

Aber erleichtert plötzlich andere Stellen in meinem Script!! Danke!!

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.

Stimmt.

// Außerdem: Diese Funktion realisiert eine zweistufige Sortierung doch schon. Warum nicht Dreistufigkeit einbauen?

Berechtigter Einwand! Schon geändert!

Meine aktuelle Version sieht jetzt wie folgt aus, führt aber noch immer nicht zum gewünschten Ergebnis. Anscheinend wird die "erste Stufe" der Überprüfung nicht (oder anders, als ich es beabsichtige) durchgeführt.

Das Array sieht so aus:

$person = Array (  
       [0] => Array( ['vorname'] => "Ein Vorname",  
                     ['nachname'] => "Ein Nachname",  
                     ['funktion'] => "eine Funktion" )  
       [1] => Array( ['vorname'] => "Ein weiterer Vorname",  
                     ['nachname'] => "Ein weiterer Nachname",  
                     ['funktion'] => "eine weitere Funktion" )  
  
  
function personen_sortieren($person1, $person2)  
   {  
   // auf "Funktion" prüfen, denn die muss an oberster Stelle stehen!  
   if(substr_count($person1['aufgaben'], "Funktion") > 0 || substr_count($person1['aufgaben'], "Schulleitung") > 0)  
      {  
      if(substr_count($person1['aufgaben'], "Funktion") > 0 && substr_count($person2['aufgaben'], "Funktion") < 1) return 1;  
      if(substr_count($person1['aufgaben'], "Funktion") < 1 && substr_count($person2['aufgaben'], "Funktion") > 0) return -1;  
      if(substr_count($person1['aufgaben'], "stellvertretende") > 0 && substr_count($person2['aufgaben'], "stellvertretende") < 1) return -1;  
      if(substr_count($person1['aufgaben'], "stellvertretende") < 1 && substr_count($person2['aufgaben'], "stellvertretende") > 0) return 1;  
      }  
   // Nachnamen vergleichen  
   if($person1['nachname'] != $person2['nachname']) return strcmp($person1['nachname'], $person2['nachname']);  
   //Vornamen vergleichen  
   if($person1['vorname'] != $person2['vorname']) return strcmp($person1['vorname'], $person2['vorname']);  
   // Anreden vergleichen  
   if($person1['anrede'] != $person2['anrede']) return strcmp($person1['anrede'], $person2['anrede']);  
   return 0;  
   }

Liebe Grüße aus Ellwangen,

Felix Riesterer.