Arry Sortieren

Fridulin

Erfahrenes Mitglied
Hallo Leute

Ich habe folgendes Problem ich habe mir schon alle möglichen sort Funktionen angeschaut SORT_NUMERIC ec.jedoch versteh ich davon nicht allzuviel und bekomme kein Ergebniss.
mein Array sieht so aus:
string(4) "name1" ["team_1"]=> string(1) "2" ["ping_1"]=> string(2) "36" ["score_1"]=> string(2) "19" ["deaths_1"]=> string(1) "1" ["frags_1"]=> string(2) "19" ["player_1"]=> string(9) "name2" ["team_0"]=> string(1) "1" ["ping_0"]=> string(2) "28" ["score_0"]=> string(1) "3" ["deaths_0"]=> string(1) "7" ["frags_0"]=> string(1) "1" ["player_0"]=> string(3) "name3" ["teamname_1"]=> string(6) "allied" ["teamname_0"]=> string(4) "axis" ["final"]=> string(0) "" }

und ich möchte gerne erreichen das er es nach ["score_0"]=> string(1) "3" sortiert, wobei die höchstezahl am Anfang stehen sollte.

Für jede Hilfe währe ich sehr dankbar

mit freundlichen Grüßen
 
Kannst Du das Array nochmal etwas strukturierter aufschreiben?

Normalerweise kann man fast jede Sortierung über [phpf]usort[/phpf] realisieren.
 
Danke für die schnelle Anwort!
Strukturierter? Wenn du mir den Befehl sagst es Struktuirerter auszugeben, währe dies kein Problem. Da das Arry von einen externen Programm gesetzt wird, weiß ich es auch nicht so genau.

Ich habe die Funktion mit eingebracht:
Warning: usort(): Invalid comparison function.

Ist denn die Fehlermeldung, hast du eine Idee Bei den anderen Sort-funtionen bekomme ich keine Fehlermeldung
usort($arrayname, "cmp");
so habe ich den Befehl hinegschrieben bzw. cmp ersetzt

Grüße
 
Du kannst das Array mit [phpf]print_r[/phpf] ausgeben und dann hier in [ code ] [ /code ] (ohne Leerzeichen) posten.

[phpf]usort[/phpf] benötigt eine Vergleichsfunktion, diese muss zwei Parameter empfangen (die zu vergleichenden Array-Elemente) und einen int zurückgeben (0 für gleich bzw. 1/-1 für größer/kleiner).
 
das hier ist das Array:
Code:
[player_2] => name3 [team_1] => 2 [ping_1] => 44 [score_1] => 0 [deaths_1] => 2 [frags_1] => 0 [player_1] => name2[team_0] => 1 [ping_0] => 27 [score_0] => 0 [deaths_0] => 0 [frags_0] => 0 [player_0] => name1

Sortieralgorithmus? Das übersteigt leider bei weiten meine PHP Kenntnisse und habe keine Ahnung wie ich soetwas erstellen kann.

Vergleichsfunktion? Wie würde denn in meinem Fall so eine vergleichsfunktion aussehen
Code:
function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1}
Was das bedeutet ist mir klar in dem Beispiel von php net, allerdings weiß ich nciht wie ich das auf mein Array übertragen soll!

Grüße
 
Normalerweise gibt es bei print_r Zeilenumbrüche und wenigstens einmal das Schlüsselwort Array, wo sind die bei Deiner Ausgabe?
Angenommen, das wäre ein Element Deines Arrays, dann müsste Deine Vergleichsfunktion so aussehen:
PHP:
function cmp ($a, $b) {
    if ($a["score_0"] == $b["score_0"]) return 0;
    return ($a["score_0"] > $b["score_0"]) ? -1 : 1;
}
 
Vielen Dank

Also diese Zeilenumbrüche wie du meinst die macht er nicht bei den Befehl anscheinend.
Die Funktion habe ich eben mal auf die schnell ausProbiert + usort eingefügt, jedoch Funktiniert meine normale Ausgabe funktion nicht
Code:
[184] => 11 [185] => 1 [186] => 1 [187] => 175 [188] => 10 [189] => 15 [190] => 12 [191] => 10 [192] => 1 [193] => 1 [194] => 14 [195] => 1 [196] => 17 [197] => 1 [198] => 1 [199] => 1 [200] => 14 [201] => 13 [202] => 18 [203] => 19 [204] => 1 [205] => 11 [206] => 0 [207] => 0 [208] => 0 [209] => 0% [210] => 0 [211] => 0 [212] => 0 [213] => 0% [214] => 0 [215] => 0 [216] => 0 [217] => 0 [218] => 0 [219] => 0 [220] => 0 [221] => 0 [222] => 0 [223] => 0 [224] => 0 [225] => 0 [226] => 0 [227] => 0 [228] => 0% [229] => 0% [230] => 0 [231] => 0
So sieht es denn mit den print Befehl aus, muß ich Morgen mal schaun ob ich das Zerlegen kann, damit wieder was sinnvolles bei rauskommt. So kann ich das nicht sagen.
Muß leider aber trotzdem für Heute shcluß machen, vielen Dank erstmal

Grüße
 
Hier ist mein Code, über dieses Script wird einfach nur das Array ausgelsen per SOCKS:
Code:
if (array_key_exists("maxplayers", $bf)) {
echo "Servername: <b>$bf[hostname]</b><br>
Server Adresse: <b>$ip</b><br>
Server CPU: <b> $bf[CPU] </b><br>
Spieler: <b>$bf[numplayers] von $bf[maxplayers]</b><br>
Mapname: <b>$bf[mapname]<br><br>
 
<center>
<table border=1>
<tr>
<th colspan=5> $bf[hostname] / $ip</th>
</tr>
<tr>
<td>Spieler / Team</td>
<td>Punkte</td>
<td>abgeschoßen</td>
<td>gestorben</td>
<td>Ping</td>
</tr>";
function cmp ($a, $b) { 
	if ($a["score_0"] == $b["score_0"]) return 0; 
	return ($a["score_0"] > $b["score_0"]) ? -1 : 1; 
} 
 
usort($bf, "cmp");
 
 
for ($i = 0; $i < intval($bf["numplayers"]); $i++) {
$spieler = $bf["player_".$i];
$punkte = $bf["score_".$i];
$abgeschoßen = $bf["frags_".$i];
$gestorben = $bf["deaths_".$i];
$ping = $bf["ping_".$i];
 
if ($bf["team_".$i] == 1) {
$teamname = "Axys";
}
else {
$teamname = "Allieds";
}
 
echo" <tr>
<td>$spieler / $teamname</td>
<td>$punkte</td>
<td>$abgeschoßen</td>
<td>$gestorben</td>
<td>$ping</td>
	 </tr>";

Ich hoffe ihr könnt mir weiterhelfen!

Grüße
 
Zurück