Hallo Heiko!
Das mit dem Sortieren ist gar nicht einfach in PHP, sondern ziemlich komplex. Aber diese Aufgabe hat meine Spieltrieb geweckt.
Am besten du legst am Anfang der Datei ein verschachteltes Array an, das die Daten zu allen Personen enthält. Die Personen sind alphabetisch sortiert. Der Platz wird durch die folgenden Scripts automatisch ermittelt. Die letzte Ziffer pro Person ist immer der aktuelle Punktestand.
<?PHP
/* ARRAY MIT DEN DATEN ZU DEN PERSONEN */
$leute = array(
array("Henning B.","1303","57","139"),
array("Henning Z.","1304","58","139"),
array("Kai","456","25","201"),
array("Sören","474","45","158"),
);
?>
Die Daten in diesem Array sind am Ende das Einzig, was du noch zu ändern brauchst, wenn sich die Punktestände verändern. Es kann beliebig viele Personen enthalten, ist also auch jederzeit erweiterbar.
Jetzt kommt der Teil für Fortgeschrittene. Das Script funktioniert so, wie es da steht 100%ig. Ich habe das getestet. Wenn du nicht weißt, was du tust, dann ändere nichts.
<?PHP
/* PERSONEN NACH PLATZ SORTIEREN */
$leute_anzahl = count($leute);
for($i=1;$i<=$leute_anzahl;$i+=1) {
$platz_tmp = $leute_anzahl;
for($j=1;$j<=$leute_anzahl;$j+=1) {
if($i!=$j) {
if($leute[$i-1][3]>$leute[$j-1][3]) {
$platz_tmp-=1;
}
elseif($leute[$i-1][3]==$leute[$j-1][3]) {
if($i<$j) {
$platz_tmp-=1;
}
}
}
}
$leute_tmp = 'leute_'.$platz_tmp;
$$leute_tmp = $i-1;
}
?>
Wie du vielleicht siehst, haben diejenigen, die weiter oben im Alphabet stehen, einen Vorteil. Bei Punktegleichstand rücken sie nämlich automatisch einen Platz hoch, weil das Script so keine Doppelbelegung verträgt. Das kann man auch ändern. Habe aber keine Lust mir darüber Gedanken zu machen, denn dann wird es nur noch komplizierter.
Jetzt müssen die Ergebnisse ausgedruckt werden:
<?PHP
/* ERGEBNISSE SORTIERT AUSDRUCKEN */
print '<table cellpadding="2" cellspacing="4" border="2"><tr><th>Vereinsplatz</th>';
print '<th>Name</th>';
print '<th>Lizenz-Nr.</th>';
print '<th>NVV-Platz</th>';
print '<th>Punkt</th></tr>'."\r\n";
for($i=1;$i<=$leute_anzahl;$i+=1) {
$leute_tmp = 'leute_'.$i;
print '<tr><td>'.$i.'</td>';
print '<td>'.$leute[$$leute_tmp][0].'</td>';
print '<td>'.$leute[$$leute_tmp][1].'</td>';
print '<td>'.$leute[$$leute_tmp][2].'</td>';
print '<td>'.$leute[$$leute_tmp][3].'</td></tr>';
}
print '</table>'."\r\n";
?>
Das Ganze ist nur zum Test so eine hässliche Tabelle. Wenn du es noch schick mit CSS formatierst, könnte es was her machen.
Viel Spaß!
Der gute Gott aus Braunschweig
n i c o