Sven Rautenberg: usort() - bisher nur leichte Verbesserungen

Beitrag lesen

Moin!

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

Naja, ich dachte das wäre klar: usort($person, "speziel_sortieren")

Der Teufel steckt manchmal im Detail. ;)

Ändert an der grundsätzlichen Sortierung aber nichts.
Aber erleichtert plötzlich andere Stellen in meinem Script!! Danke!!

Ok, dann solltest du für deine Aufgabe dein Array noch weiter umstrukturieren, sonst wird es nämlich eklig unübersichtlich. :)

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" )

Ich stelle fest, dass du hier 'funktion' hast, weiter unten aber in Stufe 1 nach 'aufgaben' sortierst. Paßt nicht zusammen, würde ich meinen. :)

Außerdem halte ich das Platzieren aller möglichen Aufgaben in einem String für sehr unschön. Da muß man dann immer Stringfunktionen anwenden, um einzelne Aufgaben herauszufinden, sie können vorne, in der Mitte oder ganz hinten stehen, schön durcheinander ("Stellvertretender Schulleiter Vertrauenslehrer" ist das jetzt der Stellvertretende Vertrauenslehrer?), und insgesamt ist die Handhabbarkeit nicht wirklich nett.

Ich empfehle daher, die Aufgaben (oder Funktionen - aber bitte einheitlich nutzen) anders zu strukturieren, nämlich datenbankorientiert:

Du hast ein Array "Aufgaben", in dem der Wichtigkeit nach (für die Sortierung) alle Aufgaben verzeichnet sind. Ein kleiner Index signalisiert hohe Wichtigkeit beim Sortieren:

[code lang=php]
$aufgaben = array('Schulleiter','Stellv. Schulleiter','Sekretariat','Lehrer')

  
Und dein Personenarray nimmt jeweils auf diese Funktionen Bezug:  
~~~php
  
$personen = array(  
       [0] => Array( ['vorname'] => "Ein Vorname",  
                     ['nachname'] => "Ein Nachname",  
                     ['funktion'] => array (0,3), //Schulleiter, Lehrer  
       [1] => Array( ['vorname'] => "Ein weiterer Vorname",  
                     ['nachname'] => "Ein weiterer Nachname",  
                     ['funktion'] => array(2), // Sekretariat  
   )  

Deine Sortierung muß also nur den Minimalwert herausfinden, der im Array ['funktion'] gespeichert ist, und den kleineren Wert nach vorne sortieren.

Eine Funktion für das Minimum im Array ist min().

  

> function personen_sortieren($person1, $person2)  
>    {  

      // Funktionen vergleichen  
      if (min($person1['funktion']) != min($person2['funktion']) return (min($person1['funktion']) < min($person2['funktion']) ? -1 : 1);  
      // Das Minimum (ranghöchste Funktion) vergleichen und je nachdem -1 oder 1 zurückgeben.  

>    // 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;  
>    }  

- Sven Rautenberg

--
My sssignature, my preciousssss!