array_multisort, mehrfache Ausführung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • array_multisort, mehrfache Ausführung

    Hallo zusammen,

    ich habe hier ein Problem mit array_multisort. Hab dazu auch schon die Suchfunktion bemüht, aber leider nichts gefunden, was mir helfen könnte (auch mit Google net ).

    Zur Problemstellung:
    ich baue gerade eine Tippspielseite für die Bundesliga. Ist eigentlich auch schon fertig soweit, nur würde ich gerne eine weitere Funktion einbauen, die die Tabellenplatzierung nach Spieltagen in ein Bild schreibt (eine Art Diagramm/Chart, mit jpgraph).

    Dazu muss ich aber zu jedem Spieltag die Tabelle berechnen lassen, und genau da liegt das Problem.
    Für die Erstellung der Tabelle benutze ich array_multisort, dessen Codeschnipsel hier im Forum mir sehr weitergeholfen hat.
    Allerdings funktioniert dieses multisort nur bei einem einzigen Durchlauf, beim zweiten erscheint die schöne Fehlermeldung
    Warning: array_multisort() [function.array-multisort]: Array sizes are inconsistent in....
    Und ich steige einfach nicht dahinter, wie ich das ganze verhindern/umgehen/korrigieren kann.

    So, dann mal zu meinem Code:
    PHP-Code:
    // Als Test von 1 - 5
    for ($spieltag=1$spieltag<6$spieltag++)
     {

        
    // Heimergebnisse
        
    $result mysql_query("
                            SELECT ms.id, ms.name,
                            SUM(p.punkte_heim)   AS ms_punkte,
                            SUM(p.tore_heim)     AS ms_tore,
                            SUM(p.tore_gast)     AS ms_gegentore
                            FROM mannschaften ms
                            LEFT JOIN paarungen p ON (p.heim=ms.id)
                            WHERE p.spieltag BETWEEN 1 AND 
    $spieltag
                            GROUP BY ms.id
                            ;"
    );

        while(
    $ms_heim mysql_fetch_array($result))
         {
            
            
    $ms[$ms_heim[id]][punkte]     = $ms_heim[ms_punkte];
            
    $ms[$ms_heim[id]][tore]       = $ms_heim[ms_tore];
            
    $ms[$ms_heim[id]][gegentore]  = $ms_heim[ms_gegentore];
            
    $ms[$ms_heim[id]][name]       = $ms_heim[name];
         }
        
        
        
        
    // Auswärtsergebnisse
        
    $result mysql_query("
                            SELECT ms.id, ms.name,
                            SUM(p.punkte_gast)   AS ms_punkte,
                            SUM(p.tore_gast)     AS ms_tore,
                            SUM(p.tore_heim)     AS ms_gegentore
                            FROM mannschaften ms
                            LEFT JOIN paarungen p ON (p.gast=ms.id)
                            WHERE p.spieltag BETWEEN 1 AND 
    $spieltag
                            GROUP BY ms.id
                            ;"
    )
        
        while(
    $ms_heim mysql_fetch_array($result))
         {
            
    $ms[$ms_heim[id]][punkte]    += $ms_heim[ms_punkte];
            
    $ms[$ms_heim[id]][tore]      += $ms_heim[ms_tore];
            
    $ms[$ms_heim[id]][gegentore] += $ms_heim[ms_gegentore];
            
    $ms[$ms_heim[id]][name]       = $ms_heim[name];
         }
        

        
    // Sortieren vorbereiten
        
    foreach($ms as $v
         {
             
    $s0[]=$v[punkte];
             
    $s1[]=$v[tore]-$v[gegentore];
             
    $s2[]=$v[tore];
             
    $s3[]=$v[gegentore];
         } 
        
        
    // Sortieren
        
    array_multisort($s0SORT_DESCSORT_NUMERIC,
                
    $s1SORT_DESCSORT_NUMERIC,
                
    $s2SORT_DESCSORT_NUMERIC,
                
    $s3SORT_DESCSORT_NUMERIC,
                
    $ms);
        
        
        
    // Hier ist die Ausgabe
        
    echo $ausgabe;
        
        
        
    // Array löschen
        
    unset($ms);


    Das ganze funktioniert wunderbar bei einem einzigen Durchlauf (hier nur Spieltag 1), wie gesagt, doch wenn der zweite Durchlauf stattfindet (um eben die Tabelle von Spieltag 1 UND 2 zu erhalten), dann erscheint die Fehlermeldung.


    Das Array selbst ist vor der ersten Sortierung folgendermaßen aufgebaut:
    PHP-Code:

    [1] => Array
            (
                [
    punkte] => 1
                
    [tore] => 0
                
    [gegentore] => 0
                
    [name] => 1. FC Kaiserslautern
            
    )

    [
    3] => Array
            (
                [
    punkte] => 3
                
    [tore] => 2
                
    [gegentore] => 1
                
    [name] => Arminia Bielefeld

    [...]

    [
    18] => Array
            (
                [
    punkte] => 0
                
    [tore] => 0
                
    [gegentore] => 1
                
    [name] => Werder Bremen
            
    )
    [...] 
    Unsortiert eben
    Nach der Sortierung ist alles wunderbar von 0 - 17 (keine 18 mehr!) nach Punkten sortiert.

    Sobald jedoch der zweite Durchlauf kommt, sieht das ganze so aus:
    PHP-Code:
        [1] => Array
            (
                [
    punkte] => 1
                
    [tore] => 0
                
    [gegentore] => 2
                
    [name] => 1. FC Kaiserslautern
            
    )

        [
    2] => Array
            (
                [
    punkte] => 2
                
    [tore] => 2
                
    [gegentore] => 2
                
    [name] => 1. FC Nürnberg
            
    )

    [...]

        [
    18] => Array
            (
                [
    punkte] => 3
                
    [tore] => 1
                
    [gegentore] => 1
                
    [name] => Werder Bremen
            

    Also bereits sortiert, und zwar nach den Vereinsnamen (bzw. IDs)! Und ebenfalls von 1 - 18, und nicht wie beim ersten Durchlauf von 0 - 17.
    Ich denke, genau hier liegt der Fehler, dass das Array eben von 1-18 und nicht von 0 - 17 geht. Aber ich kriegs einfach nicht hin...
    Und es macht auch keinen Unterschied, ob ich ORDER BY ms.id stehen lasse oder nicht.


    Ich habe auch schon diverse Sachen probiert, also z.B. das Array nicht zu löschen, das Array vorher neu mit $ms = array(); anzulegen, das Array vor dem ersten Sortieren selbst nochmal zu sortieren, aber nüscht hat geholfen... *schnüff*

    Hoffe um Hilfe
    Zuletzt geändert von sp00n; 11.08.2004, 10:32.

  • #2
    Der Thread, auf den du verlinkt hast, gibt es nicht mehr..
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

    Kommentar


    • #3
      ich würde mal sagen, dass es den nie gab .. ;-) zumindest nicht lange.
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        oh... komisch.
        da hat sich eine 0 bei der threadid eingeschlichen, seltsam...
        naja, is gefixt

        Kommentar


        • #5
          ok, in nem anderen forum hat jemand die lösung gepostet

          ich musste vor die foreach schleife erst noch die arrays leeren *aufdenkopfschlag*
          PHP-Code:
          // Sortieren vorbereiten 

              
          $s0 = array(); 
              
          $s1 = array(); 
              
          $s2 = array(); 
              
          $s3 = array(); 
               
              foreach(
          $ms as $v
               { 
                   
          $s0[] = $v[punkte]; 
                   
          $s1[] = $v[tore]-$v[gegentore]; 
                   
          $s2[] = $v[tore]; 
                   
          $s3[] = $v[gegentore]; 
               } 
          funzt jetzt problemlos

          Kommentar

          Lädt...
          X