Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 13-09-2008, 10:27
torud
 Registrierter Benutzer
Links : Onlinestatus : torud ist offline
Registriert seit: Oct 2005
Beiträge: 61
torud ist zur Zeit noch ein unbeschriebenes Blatt
Standard Berechnung eines Rankings scheitert...

Hallo Wissende,

ich habe versucht ein Ranking, also eine Spieltagstabelle im Fussball zu berechnen, bekomme es aber einfach nicht hin. Also es läuft schon, aber ich denke mal, dass mein Problem darin besteht, dass ich nicht in der Lage bin dynamische mehrdimensional Arrays zu erzeugen - falls das überhaupt der richtige Weg ist.

Im folgenden kann der geneigte Helfer sehen, wie ich es derzeit löse. Der Code ist nicht sonderlich, aber ich kanns nicht besser.

Folgendes passiert in dem Script:
Das Script soll eine Tabelle in einer Liga einer bestimmten Saison bis zu einem bestimmten Spieltag berechnen.
Folgendes Problem habe ich hierbei. Ich ging davon aus, dass ich mit folgendem Code in einem mehrdimensionalen Array einen eindeutigen Eintrag erstellen kann.
PHP-Code:
$ranking[$teams_count->id][0] = $match_count->team_a_id
Leider scheint das so nicht zu stimmen, denn es wird mir jedes mal, wenn ich diesen Aufruf so tätige ein neuer Array angelegt, was zur Folge hat, dass in meiner Tabelle am 3. Spieltag jedes Team 3 mal gelistet wird, da dieser Eintrag im Array 3 mal vorgenommen wurde, weil die Team_id 3 mal gefunden wurde.

Ich habe keine Ahnung ob jemand von versteht was ich meine, werde aber gern weitere Fragen beantworten.

PHP-Code:
function GetRankingOfRound($league_id$season_id$round)
{
    
//wir holen uns nur mal so die anzahl der gefundenen spiele
    
$sql "SELECT * FROM sdl_rounds WHERE season_id ='$season_id' and league_id='$league_id' and round <= '$round'";
    
$erg mysql_query($sql);
    
$rowy mysql_num_rows($erg);
    
$rows 1;

    echo(
"<table cellspacing=\"0\" cellpadding=\"0\" width=\"812px\">\n");
    echo(
"<tr><th>Tabelle ".$round." Spieltag</th><th>Punkte</th><th>Tore</th><th>Diff</th></tr>\n");

    
//wir holen uns die wertigkeit eines spieles aus der db
    
$sql "SELECT pts_g,pts_u,pts_v FROM sdl_leagues WHERE id='$league_id'";
    
$details mysql_query($sql);
    
$res mysql_fetch_object($details);
        
$pts_g $res->pts_g#gewinner
        
$pts_u $res->pts_u#unentschieden
        
$pts_v $res->pts_v#verloren

    //nur zum debuggen
    
echo 'Sieg:'.$pts_g;
    echo 
'Loos:'.$pts_v;
    echo 
'Unen:'.$pts_u;

    
#alle teams der liga durchkauen und von jedem team jedes spiel eines spieltages holen
    
$sql     "Select * from sdl_teams where league_id = '$league_id'";
    
$teams     mysql_query($sql);
    while (
$teams_count mysql_fetch_object($teams)) {
        
$sql=  "SELECT * FROM sdl_rounds
                WHERE season_id ='$season_id' AND
                league_id ='$league_id' AND
                round <='$round' AND
                (team_a_id ="
.$teams_count->id." OR team_b_id =".$teams_count->id.")";
        
$matches mysql_query($sql);
        while (
$match_count mysql_fetch_object($matches)) {
            
//das gesuchte team ist team a und hat gewonnen
            
if (($match_count->team_a_id == $teams_count->id) and ($match_count->result_a $match_count->result_b)) {
              
//erzeuge eindeutigen eintrag im array mit team_id
              
$ranking[$teams_count->id][0] = $match_count->team_a_id;
              
//lies bisherige gewonnene punkte ein
              
$pts $ranking[$teams_count->id][1];
              
//schreibe aktualisierte punkte zurück
              
$ranking[$teams_count->id][1] = $pts+$pts_g;
            }
            
//das gesuchte team ist team a und hat verloren
            
else if (($match_count->team_a_id == $teams_count->id) and ($match_count->result_a $match_count->result_b)) {
              
$ranking[$teams_count->id][0] = $match_count->team_a_id;
              
$pts =$ranking[$teams_count->id][2];
              
$ranking[$teams_count->id][2] = $pts+$pts_v;
            }
            
//das gesuchte team ist team a und hat unentschieden
            
else if (($match_count->team_a_id == $teams_count->id) and ($match_count->result_a $match_count->result_b)) {
              
$ranking[$teams_count->id][0] = $match_count->team_a_id;
              
$pts =$ranking[$teams_count->id][3];
              
$ranking[$teams_count->id][3] = $pts+$pts_u;
            }
            
//das gesuchte team ist team b und hat gewonnen
            
else if (($match_count->team_b_id == $teams_count->id) and ($match_count->result_b $match_count->result_a)) {
              
$ranking[$teams_count->id][0] = $match_count->team_b_id;
              
$pts $ranking[$teams_count->id][1];
              
$ranking[$teams_count->id][1] = $pts+$pts_g;
            }
            
//das gesuchte team ist team b und hat verloren
            
else if (($match_count->team_b_id == $teams_count->id) and ($match_count->result_b $match_count->result_a)) {
              
$ranking[$teams_count->id][0] = $match_count->team_b_id;
              
$pts =$ranking[$teams_count->id][2];
              
$ranking[$teams_count->id][2] = $pts+$pts_v;
            }
            
//das gesuchte team ist team b und hat unentschieden
            
else if (($match_count->team_b_id == $teams_count->id) and ($match_count->result_b $match_count->result_a)) {
              
$ranking[$teams_count->id][0] = $match_count->team_b_id;
              
$pts =$ranking[$teams_count->id][3];
              
$ranking[$teams_count->id][3] = $pts+$pts_u;
            }
          
//addiere die tore
          
$ranking[$teams_count->id][4] = $ranking[$teams_count->id][4] + $match_count->result_a;
          
$ranking[$teams_count->id][5] = $ranking[$teams_count->id][5] + $match_count->result_b;
          echo(
"<tr><td>".GetTeamName($ranking[$teams_count->id][0])."</td>\n");
            echo(
"<td>".$ranking[$teams_count->id][1]."</td>\n");
            echo(
"<td>".$ranking[$teams_count->id][4].":");
            echo(
$ranking[$teams_count->id][5]."</td>\n");
            echo(
"<td>".($ranking[$teams_count->id][4]-$ranking[$teams_count->id][5])."</td>\n");
        }
    }
       echo(
"</table>\n");
    echo 
'Gesamte Spiele: '.$rowy;
    
print_r($ranking);

Wenn ich Euch jetzt fragt, was am Output rauskommt hier mal ein kleines Beispiel zum 3. Spieltag

erwünscht gewesen wäre
Tabelle 3 Spieltag Punkte Tore Diff
Bayern München 3 7:4 3

ich erhalte aber
Tabelle 3 Spieltag Punkte Tore Diff
Bayern München 2:2 0
Bayern München 3:3 0
Bayern München 3 7:4 3

wobei die einzelnen Einträge exakt den einzelnen Spieltagen entspricht.
Die Punkte sind leider falsch, da wohl ein Fehler bei der Vergabe von Punkte bei Unentschieden drin ist. Das ist aber erstmal sekundär.

Ich würde mich echt über Hilfe freuen, weil mir abstraktes Vorstellungsvermögen, wie es bei Arrays scheinbar vorhandensein muss, vollkommen abgeht.:-)
__________________
Danke
Tom
Mit Zitat antworten