php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 13-09-2008, 11: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
  #2 (permalink)  
Alt 13-09-2008, 13:07
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Lass dir mit print_r() testweise deine Arrays ausgeben, dann weißt du, was in denen drinne steht.

Zitat:
Ich habe keine Ahnung ob jemand von versteht was ich meine
Ne, nicht wirklich...

Brich dein Problem mal auf einen einfacheren Sachverhalt runter.

Irgendwie scheint die Zuordnung der IDs nicht zu stimmen. Bayern München muss doch die ganze Saison über als Mannschaft eine eindeutige ID haben - oder nicht?
Mit Zitat antworten
  #3 (permalink)  
Alt 13-09-2008, 15:32
torud
 Registrierter Benutzer
Links : Onlinestatus : torud ist offline
Registriert seit: Oct 2005
Beiträge: 61
torud ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

ich habe ja extra geschrieben, dass ich davon ausging, dass dieser Code hier:

PHP-Code:
$ranking[$teams_count->id][0] = $match_count->team_a_id
$match_count->team_a_id beinhaltet die eindeutige und einmalige ID des jeweiligen Vereins.

Verrückt ist, dass der Array selbst ganz korrekt nur 18 Einträge laut count() hat. Das stimmt also. Aber inhaltlich scheint alles irgendwie durcheinander zu gehen. Mein Problem hatte ich eigentlich auch aufgezeigt. Die Teams werden am 3. Spieltag 3 mal gelistet, statt nur einmal kumuliert.

print_r war ja schon drin im Code. Leider sitze ich momentan an einem anderen System.

Hier mal noch ein Erklärversuch, was in das Array rein soll:

$ranking[$teams_count->id][0] für die ID des Teams
$ranking[$teams_count->id][1] für die bisher gewonnenen Spiele
$ranking[$teams_count->id][2] für die verlorenen Spiele
$ranking[$teams_count->id][3] für die unentschiedenen Spiele
$ranking[$teams_count->id][4] für die erzielten tore
$ranking[$teams_count->id][5] für die bekommenen tore

So sollte eigentlich ein "Datensatz" für den FCB aussehen
$ranking[$teams_count->id][0] = 1;
$ranking[$teams_count->id][1] = 1;
$ranking[$teams_count->id][2] = 0;
$ranking[$teams_count->id][3] = 2;
$ranking[$teams_count->id][4] = 7;
$ranking[$teams_count->id][5] = 4;

Wobei, so wie ich es verstehe [$teams_count->id] in dem Fall immer die 1, also die Team_ID vom FCB haben muss.

Mache ich was falsch, oder verstehe ich das System falsch?
__________________
Danke
Tom
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni


 

Aktuelle PHP Scripte

HeidiSQL - kostenloses MySQL front-end Editor für Windows ansehen HeidiSQL - kostenloses MySQL front-end Editor für Windows

HeidiSQL - ist ein Windows-Editor für die bekannt open Source Datenbank mySQL

10.12.2018 Berni | Kategorie: MYSQL/ Management
piwik Open-Source Webanalyse-Software ansehen piwik Open-Source Webanalyse-Software

piwik ist eine gute Alternative zu Google Analytics. Viele Features und ein modernes Erscheinungsbild mit aussagefähigen Statistiken in Echtzeit

10.12.2018 phpler | Kategorie: PHP/ Besucherzaehler
jQuery Mobile ansehen jQuery Mobile

Touch-Optimized Web Framework für Smartphones & Tablets

09.12.2018 phpler | Kategorie: AJAX/ Framework
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:42 Uhr.