Seite 1 von 1
[PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 03.10.2009 12:09
von Bisonte
Hallo...
Ich versuch mich grad an einer Highscoreliste in PHP... und hab da auch glatt ein Problem :
Ich habe ein Array das ich schon sortiert bekommen habe ($user[guid] = Punkte). Soweit so gut.
Was ich irgendwie nicht in meinen Schädel kriege ist, wie bekomme ich nur die 10 besten angezeigt ?
Code: Alles auswählen
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
}
uasort($user, 'cmp');
mit print_r($user); zeigt er mir die daten ja nun schonmal in der richtigen reihenfolge an, aaaber wie krieg ich nur 10 angezeigt.... es sind leider mehr als 50 user da... ?
Edit: Da fällt mir grad ein, man könnte ja alles in eine DB schreiben und dann per MySQL auslesen, aber das kanns ja auch nicht sein, oder ?
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 03.10.2009 15:17
von STARGÅTE
was soll den
guid sein ?
Du kannst Arrays gezieht so ausgeben:
for ($n=0;$n<10;$n++)
{
echo $MyArray[$n];
}
voraussetzung das Array ist nummerisch, falls nicht, array_values($assoz_array) macht es nummerisch.
Ansonsten gibs hier n menge Infos:
Array - Funktionen
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 04.10.2009 03:22
von Bisonte
Die Seite ist schonmal gar nicht verkehrt

thx.
Die Sache mit der For Schleife klappt nicht, da er mir dann ja nur die ersten 10 User anzeigt. Diese wären dann aber wieder gemischt, also nix mit sortieren.
edit:
Ich habs jetzt mit einer foreach() schleife mit Break bedingung gelöst....
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 05.10.2009 14:05
von Vermilion
Wenn du eine MySQL Datenbank benutzt, kannst du gleich in der Datenbankabfrage angeben, dass er nur die ersten 10 Einträge der Ergebnismenge anzeigen soll. Ist schon ein bisschen länger her, aber ich meine, das sollte dann ungefähr so aussehen:
Code: Alles auswählen
SELECT name, score FROM highscore ORDER BY score LIMIT 10;
Wahrscheinlich heißt es wieder "SORT BY" statt "ORDER BY", ich verwechsele das immer...
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 06.10.2009 03:34
von Bisonte
Wäre eine Gute Idee gewesen (hatte ich auch schon im Kopf) Aaaber
Die Daten stehen in verschiedenen Tables.... UserID und Name in User und die Punkte sind ganz woanders, und dort nur mit
der UserID... also muss ich ja nun "von Hand" zuordnen....
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 06.10.2009 09:13
von Vermilion
Nö. Da lässt sich auch etwas machen. Stichwort: Joins. Damit kannst du mehrere Tabellen bzw. MySQL-Abfragen zu einer Ergebnismenge zusammenfassen.
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 06.10.2009 10:13
von Froggerprogger
Die Sache mit der For Schleife klappt nicht, da er mir dann ja nur die ersten 10 User anzeigt. Diese wären dann aber wieder gemischt, also nix mit sortieren.
??? Kannst doch das Array
erst sortieren, und
dann vom sortierten Array die ersten 10 Einträge ausgeben - so meinte es Stargate auch sicherlich.
Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?
Verfasst: 06.10.2009 18:01
von Bisonte
Ok. Also :
In DB1 Stehen in einem Table die UserID und der Name und Level dazu.
In einem anderen Table stehen dann die verschiedenen Sachen die Punkte bringen.
In DB2 stehen die Punkte für die Sachen aus der anderen DB.
Lässt sich nicht anders machen, ist fest vorgegeben.
Nun lass ich alle Sachen die Punkte bringen durch die Wertung aus der 2. DB laufen, damit daraus eine Gesamtpunktzahl wird.
aber code spricht mehr als tausend worte :
Code: Alles auswählen
$arcpoints = array();
$query = mysql_query("SELECT id, rewpoints FROM `game`.`achievement` ORDER BY id") or die (mysql_error());
while ($row_list = mysql_fetch_object($query))
{
$arcpoints[$row_list->id] = $row_list->rewpoints;
}
$query = mysql_query("SELECT guid, name, level FROM `user`.`players` ORDER BY guid ASC") or die (mysql_error());
while ($row_list = mysql_fetch_object($query))
{
$userid[$row_list->guid] = $row_list->name.' ('.$row_list->level.')';
$useridpts[$row_list->guid] = 0;
}
$query = mysql_query("SELECT guid, achievement FROM `user`.`achievement`") or die (mysql_error());
while ($row_list = mysql_fetch_object($query))
{
$useridpts[$row_list->guid] = $useridpts[$row_list->guid] + $arcpoints[$row_list->achievement];
}
function cmp($a, $b) {
if ($a == $b) {
return 0;
}
return ($a > $b) ? -1 : 1;
}
uasort($useridpts, 'cmp');
foreach($useridpts AS $k => $v)
{
$count++;
echo '<tr>';
echo '<td align="center">'.$count.'.</td>';
echo '<td align="center">'.$userid[$k].'</td>';
echo '<td align="center">'.$v.'</td>';
echo '</tr>';
if ($count==10)
{
break;
}
}
Natürlich vorher dbs auf usw... und tabellen richtig auf und zumachen usw... ist ja jetzt nur ein auszug.
Alles irgendwie aus dem PHP Tutorial
http://tut.php-quake.net/de/index.html
und ein bisschen Logik zusammengedengelt... da ich ja eigentlich kein plan von php hab
