PHP Zufallszahlen

deniz

Well-known member
25 März 2008
320
27
Hi Leute,

ich habe mich nun ran gesetzt um etwas PHP zu lernen. Als buch habe ich "PHP5 für Dummies". Tolles Buch.

Ich habe nun paar Zeilen geschrieben, die durch Zufall 7 Zahlen zwischen 1 und 49 wählen. Da es im Lotto jedoch nur 6 aus 49 sind, möchte ich die 7 Zahl als Superzahl ausgeben lassen. Die Superzahl ist jedoch nur von 0-9.

Wie kann ich nun die siebte Zahl zwischen 0 und 9 begrenzen? Bin für jeden Denkanstoß dankbar.

PHP:
$zahl1 = rand(1,49);
$zahl2 = rand(1,49);
$zahl3 = rand(1,49);
$zahl4 = rand(1,49);
$zahl5 = rand(1,49);
$zahl6 = rand(1,49);
$zahl7 = rand(1,49);

$zahlen[] = array($zahl1, $zahl2, $zahl3, $zahl4, $zahl5, $zahl6, $zahl7);

$zahlen = array(); 
    for($i=0; $i<8; $i++) { 
        $temp = mt_rand(1,49);
        if( in_array($temp, $zahlen) ) { 
            $i--; 
            continue; 
        } 
        $zahlen[] = $temp;
    }

print "<br><br><br><center><font size=\"5\"> ".$zahlen[1]."  ".$zahlen[2]."  ".$zahlen[3]."  ".$zahlen[4]."  ".$zahlen[5]."  ".$zahlen[6]." <br><br></font></center>";

print "<center><font color=\"red\" size=\"5\"> Superzahl: ".$zahlen[7]." </font></center>";
 
Das ist ziemlich einfach:

PHP:
$zahl7 = rand(0,9);

Das habe ich ja verstanden, nur die Ausgabe erfolgt dann nicht zwischen 0 und 9 da die Abrage ja nochmal korrigiert wenn die Zahl schon mal vorkommt. im Endeffekt wird die Zahl dann doch wieder zwischen 1 und 49 gewählt.

PHP:
$zahlen = array();  
    for($i=0; $i<8; $i++) {  
        $temp = mt_rand(1,49); 
        if( in_array($temp, $zahlen) ) {  
            $i--;  
            continue;  
        }  
        $zahlen[] = $temp; 
    }
 
Naja dann lass $zahl7 doch aus dem array raus, wird doch eh nur einmal gezogen, von daher kann sie nicht doppelt vorkommen.
 
PHP:
$zahl1 = rand(1,49);
$zahl2 = rand(1,49);
$zahl3 = rand(1,49);
$zahl4 = rand(1,49);
$zahl5 = rand(1,49);
$zahl6 = rand(1,49);
$zahl7 = rand(1,49);

$zahlen[] = array($zahl1, $zahl2, $zahl3, $zahl4, $zahl5, $zahl6, $zahl7);

$zahlen = array();

hmh? 8O

wozu füllst du erst das array, ums dann wieder zu leeren?




PHP:
$zahlen = array(); 
for($i=0; $i<7; $i++) { 
  $temp = mt_rand(1,49); 
  if( in_array($temp, $zahlen) ) { 
    $i--; 
    continue; 
  } 
  $zahlen[] = $temp; 
}
sort($zahlen);

echo 'Die Lottozahlen: '. implode(', ', $zahlen).'<br>
Superzahl: '. mt_rand(0,9);

==>

HTML:
Die Lottozahlen: 11, 24, 27, 30, 31, 34, 45<br> 
Superzahl: 6
 
Oh ich seh schon, mein Tipp den Mersenne Twister Random zu verwenden wurde schon gegeben ^^

Code:
while($i++<7){ printf("%d ",mt_rand(1,$i==7?9:49));}

Jemand was kuerzeres :evil:
 
Hm ok:
PHP:
while($i++<49){$n[]=$i;}
while($i++<7){
$c=mt_rand(1,count($n));printf("%d ",$n[$c]);unset($n[$c]);}
print(mt_rand(1,9);
 
ungeprüft:

PHP:
$bereich = range(1, 49); // array mit allen Zahlen erstellen
$bereich = shuffle($bereich); // array durcheinander bringen
Jetzt brauchst Du nur noch mit den ersten 7 Elementen des Arrays zu arbeiten.
Da stehen dann die Zufallszahlen drin (6 Zahlen + Zusatzzahl).

Die Superzahl wie oben schon erwähnt anschliessend noch mit
PHP:
$sz = rand(0,9);
Denn die wird auch beim Lotto aus einem separaten Pott gezogen.
 

Gibt nur die Superzahl aus :ugly:.

Warum nicht noch einfacher?

PHP:
$numStr = '';
foreach(array_rand($range = range(1, 49), 6) as $key)
{
    $numStr .= $range[$key] . ', ';
}

echo rtrim($numStr, ', ');

oder

PHP:
$range = range(1, 49);
shuffle($range);
$range = array_slice($range, 0, 6);
sort($range);
echo implode(', ', $range);

tun es auch :LOL:.

Wobei es theoretisch noch kürzer geht, wenn eine Funktion á la array_values_by_keys existieren würde oder man von array_rand die Array-Werte zurückgeben lassen kann. Dann wären wir irgendwann bei:

PHP:
array_rand(range(1, 49), 6, ARRAY_RAND_VALUES);

Kürzer ginge es dann nur noch mit:

PHP:
lottery('Germany');

Ob das aber implementiert wird ist fraglich.