Arry Sortieren

Du solltest Dein Array anders aufbauen (und zwei Arrays daraus machen).
Ein Array für die "Stammdaten" (die kannst Du zur Not auch so lassen, das spart ggf. unnötige Variablenschiebereien), die Du oben in Deinem Code ausgibst und ein
2-Dimensionales Array für die Spielerdaten:
PHP:
//bis vor der Compare-Funktion so lassen, 
//ausser das mit den Indizes, siehe Text nach 
//dem Code
function cmp ($a, $b) {
	if ($a["punkte"] == $b["punkte"]) return 0;
	return ($a["punkte"] > $b["punkte"]) ? -1 : 1;
}

$stats = array();
for ($i = 0; $i < intval($bf["numplayers"]); $i++) {
    $temp = array();
    $temp["spieler"] = $bf["player_".$i];
    $temp["punkte"] = $bf["score_".$i];
    //Abgeschossen schreibt man mit ss
    //Vorsichtshalber würde ich im Code
    //auch keine Sonderzeichen verwenden
    $temp["abgeschossen"] = $bf["frags_".$i];
    $temp["gestorben"] = $bf["deaths_".$i];
    $temp["ping"] = $bf["ping_".$i];
    if ($bf["team_".$i] == 1) {
        $temp["teamname"] = "Axys";
    } else {
        $temp["teamname"] = "Allieds";
    }
    //Das temp-Array wird als Element an das
    //andere Array gehängt. Somit erhältst Du
    //ein 2-dimensionales Array:
    $stats[$i] = $temp;
}

usort($stats, "cmp");

foreach ($stats as $id => $playerstat) {
    $spieler = $playerstat["player"];
    $punkte = $playerstat["score"];
    $abgeschossen = $playerstat["frags"];
    $gestorben = $playerstat["deaths"];
    $ping = $playerstat["ping"];
    $teamname = $playerstat["teamname"];

    //hier Deine Ausgabe,
    //falls Du den ehemaligen
    //index des Spielers benötigst,
    //er steht in $id
}
Ausserdem sollten die die String-Arrayindizes (z.B. hostname, CPU, numplayers in Hochkomma oder Anführungszeichen schreiben. So wie es jetzt ist, benutzt Du Konstanten, die nur, weil sie nicht definiert sind, dem String entsprechen, den Du haben willst. Wenn eine dieser Konstanten mal definiert wird oder dieses "Feature" in einer neueren PHP-Version wegfällt, kannst Du Deinen Code komplett neu schreiben.

Ein bisschen mehr Einrücken kann auch nicht schaden.

Statt
PHP:
array_key_exists("maxplayers", $bf)
solltest Du
PHP:
isset($bf["maxplayers"])
schreiben, das existiert auch vor PHP 4.1.0 schon.

Ich persönlich bevorzuge bei der Ausgabe, Variablen und feste Texte zu trennen, so dass auch in einem Jahr noch schnell auffällt, wo Variablen zu finden sind (Vorrausgesetzt ein Editor mit Syntaxhighlighting), also statt
PHP:
echo "blabla $variable fester Text";
kannst Du
PHP:
echo "blabla ".$variable." fester Text";

Und ein letzter Hinweis: Wenn Du hier im Editor PHP-Code einfügst, kannst Du statt code in eckigen Klammer php in eckigen Klammern schreiben. Dann wird der Code entsprechend der Syntax hervorgehoben. Für html gilt das entsprechend, andere Sprachen glaube ich gibt es aber nicht.

Gruß hpvw
 
Besten Dank für deine Mühe und für die PHP Tipps, habe mir PHP selber so einigermaßen beigebracht und deshalb weiß ich diese nicht.
Das war eine suepr Idee mit den 2Dimensinales Array (auch wenn ich noch nicht ganz das verständiss dafür habe wie es jetzt abgespeichert wird.)

So sieht das Stats Array aus
Code:
 [3] => Array ( [spieler] => Spielername [punkte] => 0 [abgeschossen] => 0 [gestorben] => 0 [ping] => 361 [teamname] => Axys ) )

Also abgespeichert wird alles richtig nur wenn ich $spieler ausgeben ec. will ist die Variable leer. Nur ping id und teamname Funktionieren, hast du eine Ahnung wieso?

Grüße
 
Uuups, sorry, Cut'n'Paste-Fehler:
Schreib mal statt
PHP:
    $spieler = $playerstat["player"];
besser
PHP:
    $spieler = $playerstat["spieler"];
und entsprechend in den folgenden Zeilen statt score punkte, statt frags abgeschossen und so weiter.
 
Zurück