TopTen Rangierung - Mehrdimensionales Array sortieren

zempsit

Erfahrenes Mitglied
Hallo

Ich habe in einer MySQL-Datenbank diverse Ranglisten von mehreren Sportdisziplinen mit den Rekordwerten einer Schule.
Nun habe ich vor, eine TopTen-Rangliste zu machen, so eine Art Medaillenspiegel, wo es darum geht, wer die meisten TopTen-Klassierungen hat.

Ich habe also nun für jeden Schüler, der in den Topten mindestens einer Disziplin vorkommt, ein Array aus der DB gelesen. Der Aufbau dieses Arrays ist folgendermassen:

$schuler_x = array( "1. Ränge" => Anzahl, "2. Ränge" => Anzahl, "3. Ränge" => Anzahl, etc.)

Nun habe ich all diese Arrays von den einzelnen Schüler in ein weiteres Array verpackt. Dieses Array will ich nun so sortieren, damit die Reihenfolge stimmt. Es soll zuerst nach dem 1. Rang, dann nach dem 2. Rang, dann nach dem 3. Rang usw. sortiert werden.

Meines Wissens ist es ja möglich mit usort() ein solches mehrdimensionales Array zu sortieren. Aber die Funktion würde wohl ziemlich kompliziert.
Eine Variante wäre es auch, alles in eine MySQL-Tabelle zu speichern und dann von dort sortiert auszulesen.

Aber vielleicht weiss ja jemand von euch eine relativ einfache Variante, wie ich die Rangierung am Besten hinkriege ohne das über MySQL zu machen.

Ich hoffe, dass ich mein Problem genug deutlich geschildert habe. Sonst fragt bitte nach.

mfg zempsit
 
Das ist mal ein beispiel ;)

PHP:
<?php

$arrayna = array("Max", "Manuel", "Dieter", "Erich");

$arraynr = array(1.12,3.22, 4.22, 5.22);

sort($arraynr);
$array2 = array_combine($arrayna, $arraynr);

foreach($array2 as $key => $value) {

echo $key.' :: '.$value.'<br />';

}
?>

Ich hoffe du weißt wie man von MySQL Einträge alles in einem array ladet oder?
 
Hey KD3

Danke für deine Antwort. Ich habe deine Lösung nicht ausprobiert, weil ich gerade selbst eine gefunden habe, die mir zu funktionieren scheint:

PHP:
foreach ($topten as $key => $row) {
    for ($i=1; $i<=10; $i++) {
		${"platz_$i"}["$key"]  = $row["$i"];
		}
	}

array_multisort($platz_1, SORT_DESC, $platz_2, SORT_DESC, $platz_3, SORT_DESC, $platz_4, SORT_DESC, $platz_5, SORT_DESC, $platz_6, SORT_DESC, $platz_7, SORT_DESC, $platz_8, SORT_DESC, $platz_9, SORT_DESC, $platz_10, SORT_DESC, $topten);

Bei $topten handelt es sich um das Array, in welchem die einzelnen Schüler-Arrays mit den Rangierungen sind.

Nach dieser Sortierung kann ich alles ganz normal auslesen:

PHP:
foreach($topten as $name => $value) {
	echo $value["schueler_id"].' ';
	foreach ($value as $rang => $anzahl) {
		if ($rang!="schueler_id") {
			echo 'Platz '.$rang.': '.$anzahl.' | ';
			}
		}
	echo '<br /><br />';	
	}

Ist vielleicht etwas umständig, aber funktioniert so weit bestens.

Trotzdem danke.
 
Zurück