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
Kommentar