[PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

[PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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 ?
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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...
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag von Vermilion »

Nö. Da lässt sich auch etwas machen. Stichwort: Joins. Damit kannst du mehrere Tabellen bzw. MySQL-Abfragen zu einer Ergebnismenge zusammenfassen.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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.
!UD2
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: [PHP] Highscoreliste, aber wie zeig die ersten 10 an ?

Beitrag 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 ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten