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:
	
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:
	
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:
	
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 
							
						
					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($s0, SORT_DESC, SORT_NUMERIC,
            $s1, SORT_DESC, SORT_NUMERIC,
            $s2, SORT_DESC, SORT_NUMERIC,
            $s3, SORT_DESC, SORT_NUMERIC,
            $ms);
    
    
    // Hier ist die Ausgabe
    echo $ausgabe;
    
    
    // Array löschen
    unset($ms);
} 
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
        )
[...] 

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
        ) 
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
 
							
						 
          
 array_multisort, mehrfache Ausführung
									
									
									array_multisort, mehrfache Ausführung
								

 
 
Kommentar