Quote Berechnen bei zB 7 Teilnahmen

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

  • Quote Berechnen bei zB 7 Teilnahmen

    Hallöchen,
    ich bins mal wieder und hoffe das ich mein Problem richtig beschreiben kann:

    Ich habe eine Auflistung von Spielergebnissen. Pro Spiel/Turnier gibt es einen eindeutigen Timestamp.

    Ziel: Ich möchte zb 7 Turniere auswerten. Pro Spiel gibt es eine Quote.
    Beispiel: Spieler A hat in Spiel 1 eine Quote von 33,33, in Spiel 2: 50,00 usw.

    Dann möchte ich die einezelnen Quoten addieren. In einem Beispiel: Qoute = 83,33

    Grundlage (Auszug) ist folgende Datei (elo.php):
    PHP-Code:
    PekingPeter;Sir ConnorMcleod;1;2;1316725136
    DJ Avalon45
    ;PowerCyborg;2;1;1316725136
    hexenwesen10
    ;Snoopyy;2;0;1316725136
    akropolis1962
    ;Ass53;0;2;1316725136
    Niam47
    ;Arwen7614;0;2;1316725136
    Sir ConnorMcleod
    ;DJ Avalon45;2;0;1316725136
    hexenwesen10
    ;Ass53;0;2;1316725136
    Arwen7614
    ;Sir ConnorMcleod;0;2;1316725136
    hexenwesen10
    ;Arwen7614;0;2;1316725136
    Ass53
    ;Sir ConnorMcleod;2;0;1316725136
    DJmünstermaus
    ;Ass53;2;0;1316814183
    ConnorMcleod
    ;PowerCyborg;1;2;1316814183
    16
    -coon;Snoopyy;1;2;1316814183
    DJ Avalon45
    ;Niam47;1;2;1316814183
    akronis
    ;hexenwesen10;2;1;1316814183
    DJmünstermaus
    ;PowerCyborg;1;2;1316814183
    Snoopyy
    ;Niam47;2;1;1316814183
    akronis
    ;PowerCyborg;2;0;1316814183
    Niam47
    ;PowerCyborg;0;2;1316814183
    Snoopyy
    ;akronis;0;2;1316814183
    Angel Missing
    ;DJ Avalon45;0;2;1316980069
    PowerCyborg
    ;akronis;1;2;1316980069
    hexenwesen10
    ;Ass53;1;2;1316980069
    helle 65
    ;Snoopyy;2;0;1316980069
    Jumping Bill
    ;Niam47;2;0;1316980069
    Mamasschlumpf78
    ;dasgehtjetztnich;1;2;1316980069
    DJ Avalon45
    ;akronis;0;2;1316980069
    Ass53
    ;helle 65;2;0;1316980069
    Jumping Bill
    ;dasgehtjetztnich;1;2;1316980069
    akronis
    ;Ass53;0;2;1316980069
    Jumping Bill
    ;akronis;0;2;1316980069
    dasgehtjetztnich
    ;Ass53;0;2;1316980069 
    Die lese ich so ein:
    PHP-Code:
    $datei file("elo.php");
    $tuni_anzahl = array();
    $tabelle = array();
    foreach (
    $datei as $items){
    list (
    $name_1,$name_2,$erg_1,$erg_2,$timestamp) = explode(";",$items);

    $tabelle[$name_1]['gew'] += $erg_1;
    $tabelle[$name_1]['verl'] += $erg_2;
    $tabelle[$name_2]['gew'] += $erg_2;
    $tabelle[$name_2]['verl'] += $erg_1;
    #$tabelle[$name_1][$tuni_anzahl] = ($timestamp+=1);
    #$tabelle[$name_2]['timestamp'] += $timestamp;

     
    }
    print 
    "<pre>";
    #print_r ($tabelle);
    print "</pre>";


    $tuni_anzahl = array();
    foreach (
    $datei as $index => $item){
    list (
    $name_1,$name_2,$erg_1,$erg_2,$timestamp) = explode(";",$item);

    $tuni_anzahl[$timestamp]  += 1;
     }

    $result = array ();
    foreach (
    $tabelle as $name => $value){
    // Quote ermitteln
    $quote $value['gew']/($value['gew']+$value['verl'])*100;
    // Quote Nachkommastellen formatieren
    $quote number_format($quote,3);
    // Name und Quote ins Array

    $result[$name]['quote'] = $quote;
    $result[$name]['saetze-gewonnen'] = $value['gew'];
    $result[$name]['saetze-verloren'] = $value['verl'];

    }
    arsort($result);
    // Ausgabe
    echo "<table border =\"1\">

    <tr>
    <td align=center>&nbsp;Platz&nbsp;</td>
    <td >&nbsp;Name&nbsp;</td>
    <td align=center>&nbsp;Quote&nbsp;</td>
    <td align=center>Sätze<br>&nbsp;Gewonnen&nbsp;</td>
    <td align=center>Sätze<br>&nbsp;Verloren&nbsp;</td>
    </tr>

    "
    ;
    echo 
    "Anzahl der gewerteten Turniere waren => ".count($tuni_anzahl)."<br>";
    echo 
    "Die Quote wird so ermittelt:<br>Sätze_Gewonnen &divide; (Sätze_Gewonnen + Sätze_Verloren)&times;100<br>Es wird auf 3 Nachkommastellen gerundet<br>";
    $row_col_1 "#094E99"// Reihenfarbe 1
    $row_col_2 "#033780"// Reihenfarbe 2
    $row_start 0// Startzähler für die Reihenfarben
    $platz =1// Startzähler für die Platzierungen
    foreach ($result as $name => $value){
    $farbe = ($row_start == 0) ? $row_col_1 $row_col_2;
    $value['quote'] = number_format($value['quote'],3,',','');
    echo 
    "
    <tr style=\"background-color:"
    .$farbe.";\">
    <!-- <tr> //-->
    <td align=center>"
    .$platz++."</td>
    <td>&nbsp;"
    .$name."&nbsp;</td>

    <td align=center>&nbsp;"
    .$value['quote']."&nbsp;</td>
    <td align=center>"
    .$value['saetze-gewonnen']."</td>
    <td align=center>"
    .$value['saetze-verloren']."</td>
    </tr>
    "
    ;
    $row_start++;
    }
    echo 
    "</table>"
    Leider ist es so, dass ich alle Spiele als Quote bekomme. Das ist natürlich sinnlos, wenn ein Spieler einmal mitmacht, und dann alles zu 0 gewonnen hat.
    Dann hat der ja 100% und da kommt keiner mehr ran.

    Deshalb möchte ich gerne pro Turnier seine Quote und dann nur die letzten zb. 7 Teilnahmen addieren.

    Ich hoffe ich konnte mich verständlich ausdrücken.

  • #2
    Hi,

    mir ist das Problem noch unklar (ist das eine Elo Zahlen Ermittelung für's Schach?).

    Deshalb möchte ich gerne pro Turnier seine Quote und dann nur die letzten zb. 7 Teilnahmen addieren.
    Was machst Du, wenn er gar nicht 7 Teilnahmen hat? Bei der Variante lässt du einige Faktoren auch weg (wenn ich jetzt vom Schach ausgehe): dort würde ich als Kriterium auch noch die Stärke des Turniers (Fide-Meister, GM usw...) mit einbeziehen durch z.B. den durchschnittlichen Elo Wert!
    Mit Quote meinst du, wie viele Spiele z.B. gewonnen oder remisiert auf die Gesamtanzahl pro Turnier? Und wo ist das Problem, dass dann ins Verhältnis zu allen Turnieren zu setzen und eine Durchschnittsquote zu berechnen???

    mfg streuner
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Kommentar


    • #3
      Hallo Streuner,
      es geht nicht um ELO, sondern die Quote: Gewonne Spiele zu verlorene Spiele (es gibt kein Remis).
      Diese erechnet sich so:
      [COLOR=#000000][COLOR=#CC0000]Sätze_Gewonnen /(Sätze_Gewonnen + Sätze_Verloren) x 100[/COLOR][/COLOR]

      Zur Zeit habe ich nur eine Gesamt-Quote, also ALLE Spiele.

      Es sollte aber sein:
      Die letzten 7 Turniere seperat die Quote, und diese dann zusammen zählen.

      Hat jemand weniger als 7 Turniere, dann werden eben nur diese gewertet.

      Die Turniere sind durch den Timestamp separiert (Pro Timestamp ein Turnier)

      Kommentar


      • #4
        Deinen Weg finde ich gut.
        Mach das doch so!
        Wo ist dein Problem?

        PS:
        Ich habe ein Problem!
        Ich muss 3m scrollen.
        Wir werden alle sterben

        Kommentar


        • #5
          Mein Problem ist (pro Spieler):
          a) wie errechne ich pro Turnier und Spieler seine Quote
          b) wie addiere ich dann seine letzten zb 7 Quoten zusammen

          Leider komme ich mit Schleifen wie for oder while nicht klar. Da bin ich wohl zu dumm. Sorry

          Kommentar


          • #6
            Ich kann mich combie nur anschließen: ich finde den Weg, den Du vorhast zu gehen, auch sinnvoll. Woran hakt es den jetzt? Gibt es eigentlich noch Kriterien für die Turniere (gleich gewertet)?

            mfg streuner
            Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
            der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

            "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

            Kommentar


            • #7
              Sodele ich bin nun ein Stück weiter gekommen und
              bekomme nun die addierten gewonnen und verlorenen Spiele
              pro Turier so:
              PHP-Code:
              $tuni_anzahl = array();
              foreach (
              $datei as $index => $item){
              list (
              $name_1,$name_2,$erg_1,$erg_2,$timestamp) = explode(";",$item);

              $tuni_anzahl[$timestamp][$name_1]['gew'] += $erg_1;
              $tuni_anzahl[$timestamp][$name_1]['verl'] += $erg_2;
              $tuni_anzahl[$timestamp][$name_2]['gew'] += $erg_2;
              $tuni_anzahl[$timestamp][$name_2]['verl'] += $erg_1;
               }
              print 
              "<pre>";
              print_r($tuni_anzahl);
              print 
              "</pre>"
              Ausgabe (Auszug):
              Array ( [1316725136 ] => Array (
              [PekingPeter] => Array ( [gew] => 1 [verl] => 2 )
              [Sir ConnorMcleod] => Array ( [gew] => 6 [verl] => 3 )
              [DJ Avalon45] => Array ( [gew] => 2 [verl] => 3 )
              [PowerCyborg] => Array ( [gew] => 1 [verl] => 2 )
              [hexenwesen10] => Array ( [gew] => 2 [verl] => 4
              usw.
              Nun weis ich nicht wie ich:
              a) die Quote ausrechnen soll: Quote= Gewonnen/(gewonnen + verloren)/100
              b) Diese dann pro Turnier/Spieler zb 7x addiere

              Schonmal danke für Euren Input

              Kommentar


              • #8
                Hm..vielleicht verstehe ich das jetzt nicht, aber warum setzt du deine ermittelten gewoonen/verlorenen Werte nicht einfach in deine Formel Quote= Gewonnen/(gewonnen + verloren)/100 ein und durchläufst das für jeden User mit einer Schleife (als Beispiel)!

                mfg streuner
                Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                Kommentar


                • #9
                  Zitat von streuner Beitrag anzeigen
                  Hm..vielleicht verstehe ich das jetzt nicht, aber warum setzt du deine ermittelten gewoonen/verlorenen Werte nicht einfach in deine Formel Quote= Gewonnen/(gewonnen + verloren)/100 ein und durchläufst das für jeden User mit einer Schleife (als Beispiel)!

                  mfg streuner
                  Lieber Streuner,
                  wie ich gestern 13:10 Uhr schon anmerkte, das ich mit Schleifen
                  leider nicht zurecht komme

                  Kommentar


                  • #10
                    Dann machs dir doch mit array_map() oder array_walk() und array_filter() oder was weiß ich.

                    Es geht auch ohne Schleifen.

                    PS:
                    Wenn du wirklich und ernsthaft programmieren willst, dann kommst du um Schleifen nicht drum rum.
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      Ich hab es nun ohne Schleife hinbekommen:
                      PHP-Code:
                      foreach ($datei as $index => $item){
                      list (
                      $name_1,$name_2,$erg_1,$erg_2,$timestamp) = explode(";",$item);

                      $timestamp date('Y.m.d. H:i',$timestamp);
                      // Einzelspiele (gewonnen, verloren)addieren 
                      $tuni_anzahl[$timestamp][$name_1]['gew'] += $erg_1;
                      $tuni_anzahl[$timestamp][$name_1]['verl'] += $erg_2;
                      $tuni_anzahl[$timestamp][$name_2]['gew'] += $erg_2;
                      $tuni_anzahl[$timestamp][$name_2]['verl'] += $erg_1;
                      //Aus den Additionen die Quote errechnen und auf 3 Nachkommastellen
                      // runden
                      $tuni_anzahl[$timestamp][$name_1]['quote'] = number_format($tuni_anzahl[$timestamp][$name_1]['gew']/($tuni_anzahl[$timestamp][$name_1]['gew']+$tuni_anzahl[$timestamp][$name_1]['verl'])*100,3);
                      $tuni_anzahl[$timestamp][$name_2]['quote'] = number_format($tuni_anzahl[$timestamp][$name_2]['gew']/($tuni_anzahl[$timestamp][$name_2]['gew']+$tuni_anzahl[$timestamp][$name_2]['verl'])*100,3);

                       }
                      //Nach Datum sortieren. krsort() weil Key rückwärts/absteigend sortiert wird
                      krsort($tuni_anzahl);
                      print 
                      "<pre>";
                      print_r($tuni_anzahl);
                      print 
                      "</pre>"
                      Nun habe ich alle einzel quoten pro turnier absteigend nach Datum.

                      Wenn mir nun nur noch jemand hilft, daraus ein indiziertes array zu machen, was so aufgebaut ist:
                      PHP-Code:
                      $einzel_qoute= array (
                      array(
                      'name','gew','verl','quote'),
                      // usw.... 
                      Dann schaffe ich den Rest

                      Kommentar


                      • #12
                        OffTopic:

                        Ich hab es nun ohne Schleife hinbekommen

                        Foreach ist auch eine Schleife!

                        Wir werden alle sterben

                        Kommentar


                        • #13
                          @Wasser_Wanderer: hier PHP: Arrays - Manual kannst Du selber sehen, wie du ein so ein Array erstellen kannst

                          mfg streuner
                          Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
                          der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

                          "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

                          Kommentar


                          • #14
                            Hi Wasser_Wanderer,
                            die Funktion print_r(array $array) , die du immer verwendest, zeigt dir doch die Struktur
                            deines Arrays "$tuni_anzahl", bzw. die Verschachtelung.
                            Da siehst du, dass das Array 3 Elemente mit dem Timestamp als Index hat.
                            In jedem der 3 Elemente gibt es wiederum Arrays, die einen Namen als Index haben.
                            Diese Arrays enthalten ein Array mit "gew", "verl", "quote" als Elemente.
                            Mit einer verschachtelten foreach-Schleife kannst du "$tuni_anzahl" aufdröseln, heißt, dich bis
                            zu der Ebene bewegen, die du brauchst, um ein indiziertes Array mit Werten zu füllen.
                            Hört sich blöd (kompliziert) an, kann es aber nicht anders erklären.
                            Mit "foreach($tuni_anzahl as $day => $values) . . . " ermittelst du den Index "Timestamp" und die
                            nächste Ebene. $day enthält den Timestamp, $values das nächste Array (Ebene)Somit .
                            Innerhalb dieser Schleife dröselst du "$values" auf: "foreach($values as $name => $quotes)".
                            $name enthält den Index des Arrays $quotes, $quotes die Elemente "gew", "verl", "quote".
                            Somit sind wir am Ende und erstellen ein indiziertes Array:
                            foreach($tuni_anzahl as $day => $values){
                            //echo '<p>'.$day.'</p>';
                            foreach($values as $name => $quotes){
                            //echo '<p>'.$name.'</p>';
                            $einzel_qoute[]=array('name' => $name, 'Gew' => $quotes['gew'], 'Verl' => $quotes['verl'], 'Quote' => $quotes['quote']);
                            }
                            }

                            Gruß
                            Günni

                            Kommentar


                            • #15
                              @Wasser_Wanderer
                              Bitte brich deinen Quellcode um. Ich muss selbst bei einer Auflösung von 1920x1080 horizontal scrollen.

                              Danke
                              Peter
                              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                              Meine Seite

                              Kommentar

                              Lädt...
                              X