kostenloser Webspace werbefrei: lima-city


Mehrdimensionales Array sortieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!