Mehrdimensionales Array sortieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzahl
array
ausgabe
beibehalten
code
dritten array
einzelspieler
folgenden code
funktion
genauere auskunft
gespielten spiele
index
paar
paaren
sieg
spiel
spieler
stehen
zahl
zweiten array
-
Hallo zusammen.
Ich habe 3 verschiedene mehrdimensionale Arrays.
Es geht um Spieler, welche eine ID, Anzahl der Spiele und Anzahl der Siege in einem Array drin stehen haben. Die ID des Spielers ist der erste Index. Das erste Array sieht also so aus:
$einzelspieler[$id][0] = {Anzahl der Spiele} $einzelspieler[$id][1] = {Anzahl der Siege}
Im Zweiten Array stehen jeweils zwei Spieler als Paare mit ihren Spielen und Siegen. Dabei besteht der Index aus den IDs der beiden Spielern mit Komma getrennt, also so:
$paare[$id1.",".$id2][0] = {Anzahl der Spiele} $paare[$id1.",".$id2][1] = {Anzahl der Siege}
Und im dritten Array ist das gleiche wie im zweiten Array, nur das noch ein 3. Spieler dazu kommt.
Jetzt möchte ich diese Spieler bzw die Spieler Paare nach der Anzahl ihrer gespielten Spiele sortieren. Dazu habe ich folgenden Code benutzt;
$sortArray = array(); foreach($einzelspieler as $key => $array) { $sortArray[$key] = $array[0]; } array_multisort($sortArray, SORT_DESC, SORT_NUMERIC, $einzelspieler);
Das klappt auch soweit. Allerdings wird bei den Einzelspielern der Index ersetzt. Der Index besteht also nicht mehr aus den jeweiligen IDs, sondern aus neuen Zahlen, also 0,1,2,3... Obwohl ich bei den Paaren den gleichen Code benutze, bleibt der Index da aber erhalten. Und ich weiß nicht wodran das liegt und wie ich es beheben kann. Hier nochmal ein Beispiel:
$einzelspieler[55][0] = 15; $einzelspieler[55][1] = 10; $einzelspieler[38][0] = 22; $einzelspieler[38][1] = 16; // Hier kommt das Sortierverfahren var_dump($einzelspieler);
Ausgabe:
array(2) { [0]=> array(2) { [0]=> int(22) [1]=> int(16) } [1]=> array(2) { [0]=> int(15) [1]=> int(10) } }
$paare[20,9][0] = 34; $paare[20,9][1] = 19; $paare[41,67][0] = 12; $paare[41,67][1] = 8; // Hier kommt das Sortierverfahren var_dump($paare);
Ausgabe:
array(2) { [20,9]=> array(2) { [0]=> int(34) [1]=> int(19) } [41,67]=> array(2) { [0]=> int(12) [1]=> int(8) } }
Ich würde mich über Lösungen bzw Verbesserungs-/Änderungsvorschläge freuen.
Viele Grüße -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hoi
Das es neu indexiert wird, ist logisch, siehe auch die Beschreibung der Funktion array_multisort auf der Homepage von php.net:
Assoziative (string) Schlüssel werden beibehalten, während numerische Schlüssel neu indexiert werden.
Dein "20,9" ist keine nummerische Zahl, deshalb wird der Schlüssel beibehalten, während die Spieler-Id's nummerische Zahlen sind und deshalb neu indexiert werden.
Vielleicht solltest du besser auf die sprechenden Schlüssel verzichten und stattdessen einfach die Id als ein zusätzliches Attribut mitgeben:
$i = 0;
$einzelspieler[$i][0] = {Anzahl der Spiele}
$einzelspieler[$i][1] = {Anzahl der Siege}
$einzelspieler[$i][2] = {Spieler-Id}
$i ++;
oder um es auch gleich für die Mehrspieler-Funktion nutzbar zu machen:
$i = 0;
$array[$i][0] = {Anzahl der Spiele}
$array[$i][1] = {Anzahl der Siege}
$array[$i][2][] = {Spieler-Id1}
$array[$i][2][] = {Spieler-Id2}
$array[$i][2][] = {Spieler-Id3}
$i++;
Für eine genauere Auskunft müsste ich aber deine bisherieg Struktur kennen (also wie werden die Arrays wieder ausgelesen etc.).
Gruess
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage