Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Poisson PHP:lla

Sivun loppuun

mmikko [10.02.2016 23:12:38]

#

Hei!

Pieni ongelma. Yritän kääntää yhtä exceliä php:lle ja olen onnistunutkin siinä ainakin osittain. Koodissa kuitenkin joku on pielessä, toki on varmaan paljon semmosta, jotka kokenut koodari olisi tehnyt eritavalla.

Haetaan kierroksen pelit tietokannasta. Home, Away ja samalla tulee maaliodotusarvo, josta poissonin kaavalla lasketaan 1x2 todennäköisyydet. Seuraava koodi toimii ja antaa oikeat lukemat poisson -lukemat ensimmäiselle pelille, mutta sitten kun while -loopilla ajatetaan seuraavaan peliin niin poissonin lukemat ovat ihan kuralla.

tiedostan että muutujien nimet ovat sekavat ja koodi varmaan vielä sekavempaa ja siitä pahoittelut.

malliexceli mistä oon lähtenyt rakentamaan, jos auttaa että mitä oon yritämässä tehdä: poisson exceli

<?php

include('poisson.php');

//error_reporting(E_ALL);
//ini_set("display_errors", 1);
//ini_set("error_reporting", E_ALL | E_STRICT);

//Parametrit, joita käytetään tietojen haussa/näyttämisessä
$divi = $valinta;
//taulut //
$regular = "";
$history = "";
$bets = "";

//Haetaan kaikki ottelut//
$query = $yhteys->prepare('select * from taulu where Divi = "'. $divi .'"');
$query->execute();

// alotetaan tulostamalla taulukkoon otsikot//

echo '<form name="form1" action="' . $_SERVER['PHP_SELF'] .'">';

        echo  '<table id="lisatyt">';
        echo  '<br>';
        echo  '<tr>';
        echo  '<th>Home</th>';
        echo  '<th>Away</th>';
        echo  '<th colspan="3">1X2</th>';
        echo  '</tr>';

while ($row = $query-> fetch()) {

        $home = $row['HomeTeam'];
        $away = $row['AwayTeam'];

        echo '<tr>';
        echo '<td>' . htmlspecialchars($row['HomeTeam']) . '</td>';
	    echo '<td>' . htmlspecialchars($row['AwayTeam']) . '</td>';

        // tässä moa arvot kuvitteelliset 1x2 arvoiksi pitäsi tulla ~ 42-26-32 //
        $moa = "1.433"; // kotijoukkueen moa
        $moa1 = "1.23"; // vierasjoukkueen moa

        $tasuri1 = "0"; // kotijoukkueen tasapelin alkuarvo
        $tasuri2 = "0"; // vierasjoukkueen tasapelin alkuarvo

        // Alkuarvo kotijoukkueelle //
        $kerroin = "1";
        $kerroin2 = "2";
        $kerroin3 = "3";
        $kerroin4 = "4";
        $kerroin5 = "5";
        $kerroin6 = "6";
        $kerroin7 = "7";
        $kerroin8 = "8";
        $kerroin9 = "9";
        $kerroin10 = "10";

        // Alkuarvot vierasjoukkueelle //

        $vieras0 = "0"; // 0
        $vieras1 = "1"; // 1
        $vieras2 = "2"; // 2
        $vieras3 = "3"; // 3
        $vieras4 = "4"; // 4
        $vieras5 = "5"; // 5
        $vieras6 = "6"; // 6
        $vieras7 = "7"; // 7
        $vieras8 = "8"; // 8
        $vieras9 = "9"; // 8

        // Annetaan alkuarvo vierasjoukkueelle ja pysytään siinä //
        $test1 = poisson($moa1,$vieras0);
        $test2 = poisson($moa1,$vieras1);
        $test3 = poisson($moa1,$vieras2);
        $test4 = poisson($moa1,$vieras3);
        $test5 = poisson($moa1,$vieras4);
        $test6 = poisson($moa1,$vieras5);
        $test7 = poisson($moa1,$vieras6);
        $test8 = poisson($moa1,$vieras7);
        $test9 = poisson($moa1,$vieras8);
        $test10 = poisson($moa1,$vieras9);

        // 1-10

           while ($kerroin <= 10) {
        	       $test = poisson($moa,$kerroin);
        			   $kerroin++;
        			   $total = $test1 * $test;
        			   $sum += $total;
        	   }

         // 2-10

             while ($kerroin2 <= 10) {
        	         $testi = poisson($moa,$kerroin2);
        		     $kerroin2++;
        		     $total2 = $testi * $test2;
        		     $sum2 += $total2;
        	      }
        // 3-10

        	  while ($kerroin3 <= 10) {
        		      $testi1 = poisson($moa,$kerroin3);
        			  $kerroin3++;
        			  $total3 = $testi1 * $test3;
        			  $sum3 += $total3;
        		    }
        // 4-10

              while ($kerroin4 <= 10) {
        			  $testi2 = poisson($moa,$kerroin4);
        			  $kerroin4++;
        			  $total4 = $testi2 * $test4;
        			  $sum4 += $total4;
        			}
        // 5-10

        	  while ($kerroin5 <= 10) {
        			  $testi3 = poisson($moa,$kerroin5);
        			  $kerroin5++;
        			  $total5 = $testi3 * $test5;
        			  $sum5 += $total5;
        			}

       // 6-10
        	 while ($kerroin6 <= 10) {
        			 $testi4 = poisson($moa,$kerroin6);
        			 $kerroin6++;
        			 $total6 = $testi4* $test6;
        			 $sum6 += $total6;
        			}
        // 7-10

             while ($kerroin7 <= 10) {
        			$testi5 = poisson($moa,$kerroin7);
        			$kerroin7++;
        			$total7 = $testi5 * $test7;
        			$sum7 += $total7;
        			}

       // 8-10 / 6

            while ($kerroin8 <= 10) {
        		    $testi6 = poisson($moa,$kerroin8);
        			$kerroin8++;
        			$total8 = $testi6 * $test8;
        			$sum8 += $total8;
        			}
        // 9-10

            while ($kerroin9 <= 10) {
        			$testi7 = poisson($moa,$kerroin9);
        			$kerroin9++;
        			$total9 = $testi7 * $test9;
        			$sum9 += $total9;
        						}
        // 10-10

            while ($kerroin10 <= 10) {
        			$testi8 = poisson($moa,$kerroin10);
        			$kerroin10++;
        			$total10 = $testi8 * $test10;
        			$sum10 += $total10;
        			}

        //tasurille % arvio

                  while ($tasuri1 <= 10 & $tasuri2 <=10) {
        			 $tasuri_koti = poisson($moa,$tasuri1);
        			 $tasuri_vieras = poisson($moa1,$tasuri2);
        			 $tasuri1++;
        			 $tasuri2++;
        			 $total_tasuri = $tasuri_koti * $tasuri_vieras;
                     $sum12 += $total_tasuri;
                  }


        $ykkonen = $sum + $sum2 + $sum3 + $sum4 + $sum5 + $sum6 + $sum7 + $sum8 +        $sum9 + $sum10 + $sum11;
        $ykkonen_total = ($ykkonen)*100;
        $risti_total = ($sum12) * 100;
        $kakkonen_total = 100 - $ykkonen_total - $risti_total;

        echo '<td>' . number_format($ykkonen_total,0) . '</td>';
        echo '<td>' . number_format($risti_total,0) . '</td>';
        echo '<td>' . number_format($kakkonen_total,0) . '</td>';



        echo '</tr>';

        }

        echo '</table>';
        echo '</form>';

?>

Grez [10.02.2016 23:27:49]

#

Millä tavalla se ilmenee, että "jokin on pielessä"? Virheilmoitus? Väärä tulos?

Sitten asiasta toiseen niin käytä ihmeessä taulukoita. (array)

mmikko [10.02.2016 23:34:20]

#

Grez kirjoitti:

(10.02.2016 23:27:49): Millä tavalla se ilmenee, että &#34;jokin on...

Joo siis ekalle otteluparille tulee ihan oikea 1x2 arvio. Sitten kun lasketaan toiselle otteluparille niin luvut ovat pielessä. Mitään virhettä/ilmotusta ei tule.

mmikko [11.02.2016 08:00:25]

#

vielä selvennykseksi kuva aiheesta:

Kuva

eli ensimmäinen 1x2 oikein, mutta seuraavat väärin. eli pitäisi olla kaikissa 40-30-30.

t0ll0 [11.02.2016 18:10:38]

#

En juuri kerkeä koodiasi tulkkaamaan, mutta usein kuvailemasi ongelma johtuu siitä ettei jokainen kierros lähde samasta alkutilanteesta.

Esim. alustatko $sum muuttujia missään ja mikä tuo $sum11 on? Laittamalla virheilmoitukset näkyviin voisi selvitä useampikin asia.

mmikko [11.02.2016 20:18:52]

#

tulipas muuten mieleen työmatkalla tuo sama $sum muuttujien alustaminen. Toki olin jo aikasemmin sitä kokeillut reset/unset($sum). Nämä eivät auttaneet, nyt kuitenkin asentin $sum = "0"; niin sehän rupes toimimaan.

Pitänee varmaan josaain vaiheessa tarttua tuohon Grezin ehdottomaan array:hin. Ainakin koodin yksinkertaistuu ja ehkä tulee tehokkaampi. Toisaalta eipä tuo data määrä ole suuri niin tuskin saavutan arraylla tehohyötyä.

Problem solved.

thx.

Lebe80 [12.02.2016 09:45:39]

#

Nää pistää aina silmään....

Olisipa ne edes taulukkoja.

 // Alkuarvo kotijoukkueelle //
        $kerroin = "1";
        $kerroin2 = "2";
        $kerroin3 = "3";
        $kerroin4 = "4";
        $kerroin5 = "5";
        $kerroin6 = "6";
        $kerroin7 = "7";
        $kerroin8 = "8";
        $kerroin9 = "9";
        $kerroin10 = "10";

        // Alkuarvot vierasjoukkueelle //

        $vieras0 = "0"; // 0
        $vieras1 = "1"; // 1
        $vieras2 = "2"; // 2
        $vieras3 = "3"; // 3
        $vieras4 = "4"; // 4
        $vieras5 = "5"; // 5
        $vieras6 = "6"; // 6
        $vieras7 = "7"; // 7
        $vieras8 = "8"; // 8
        $vieras9 = "9"; // 8

        // Annetaan alkuarvo vierasjoukkueelle ja pysytään siinä //
        $test1 = poisson($moa1,$vieras0);
        $test2 = poisson($moa1,$vieras1);
        $test3 = poisson($moa1,$vieras2);
        $test4 = poisson($moa1,$vieras3);
        $test5 = poisson($moa1,$vieras4);
        $test6 = poisson($moa1,$vieras5);
        $test7 = poisson($moa1,$vieras6);
        $test8 = poisson($moa1,$vieras7);
        $test9 = poisson($moa1,$vieras8);
        $test10 = poisson($moa1,$vieras9);

Grez [12.02.2016 09:54:45]

#

mmikko kirjoitti:

Pitänee varmaan josaain vaiheessa tarttua tuohon Grezin ehdottomaan array:hin. Ainakin koodin yksinkertaistuu ja ehkä tulee tehokkaampi. Toisaalta eipä tuo data määrä ole suuri niin tuskin saavutan arraylla tehohyötyä.

Joo ei siitä tosiaan ole tarkoituskaan saada tehohyöytyä vaan nimenomaan koodin yksinkertaistumista ja sitä kautta myös vähemmän virheitä. Myöskin jos jotain tarvii korjata, niin se tarvitsee sitten korjata yhteen kohtaan eikä kymmeneen.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta