Zufallsgenerator (Lottozahlen) Doppelte Zahlen vermeiden

dwex

Erfahrenes Mitglied
Hallo Leute,

ich bin im Urlaub mal an meinem Notebook gesessen und hätte vor langeweile einen Lottozahlengenerator programmiert.
Das funktioniert auch alles ganz gut.
Ich lasse mir die Lottozahlen über eine for-Schleife generieren.
In der Schleife selbst mache ich das so:
PHP:
$zahl[] = mt_rand(1,49);
Jetzt passiert es aber das manchmal eine Zahl doppelt vorkommt und das soll ja nicht.
Hat jemand eine Idee wie man das prüfen könnte.
Ich selbst habe schon div. If-Abfragen probiert aber es hat nie geklappt - leider!

Vielen Dank im Voraus!
 
PHP:
<?php

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

?>
 
Hiho,

habe mir dieses Script mal geschnappt :p und ein wenig umgearbeitet, habe allerdings nun einige Probleme mit dem Script. Ich bekomme immer ein timeout wegen überschreitung der 30 sekunden marke... Das Problem liegt wohl meiner Ansicht nach beim übernehmen des in der Form eingetragenen Wertes (liegt wohl daran das er es nicht als reine Zahl sondern als Text annerkennt?) und er damit $i nicht hochzählen kann bzw begrenzen kann. Hoffe ihr versteht was ich meine, bin leider noch ziemlicher leihe in PHP deswegen passieren mir solche Dinge eben ;-)

<html>
<head>
<title>Zufallsgenerator</title>
<head>
Wie viele Würfel sollen fallen?
<form action="Rand.php" method="GET">
<input type="text" size="17" name="Inhalt">
<br><br>
<input type="submit" value="OK">
</form>
<?php
echo "du willst ", $_GET["Inhalt"], " Würfel haben!";
$Inhalt = $_GET["Inhalt"];
$Inhalt['text'];
$zahlen = array();
for($i=0; $i=$Inhalt; $i++) {
$temp = mt_rand(60,90);
if( in_array($temp, $zahlen, $Inhalt) ) {
$i--;
continue;
}
$zahlen['text'] = nl2br($temp['text']);
$zahlen[] = $temp;
echo (" $temp\n\r");

}

?>

</html>
 
Also wenn ich faul bin sieht mein Zufallsgen immer so aus:
PHP:
$a = array_fill(10, 30, ""); // von 10 bis 40 (10+30)
$a = array_rand($a, 5);  // fünf zufällige

Oder als Pseudocode:
Code:
$a = array_fill(VON, ANZAHL, ""); // von "VON" bis (VON + ANZAHL)
$a = array_rand($a, BENÖTIGT);

Dabei wird z.B. folgendes Array in $a erzeugt:
Code:
array(5) {
  [0]=> 13
  [1]=> 16
  [2]=> 28
  [3]=> 34
  [4]=> 38
}
Shuffle is da auch ganz nett für: http://www.php.net/manual/de/function.shuffle.php
PHP:
$a = range(1, 49);
shuffle($a);
for ($i = 0; $i < 6; $i++)
{
	echo $a[$i] . " ";
}
Ausgabe:
Code:
22 35 23 36 3 1
Nur halt leider nicht von klein nach groß sortiert ;)
 
Zuletzt bearbeitet:
um noch kurz auf Xanoskars Post einzugehen:

du solltest dir unbedingt noch ein paar Tutorials zum Umgang mit Arrays einverleiben ;)
Außerdem verkettet man Strings mit einem Punkt "." !

Das was du erreichen wolltest mal etwas verkürzt:
PHP:
<?php
echo "du willst ".$_GET["Inhalt"]. " Würfel haben!<br />";
for($i=0; $i<(int)$_GET["Inhalt"]; $i++) {
   echo mt_rand(1,6)."<br />";
}
?>
Du redest von Würfeln - das bedeutet "ziehen mit Zurücklegen" im Bereich 1-6

MfG :)
 
Was macht ihr hier eigentlich?
Die Lösung von Gumbo is doch perfekt...

Hätte das zwar mit ner while(count($zahlen) < 6)) gelöst weil ich solche continue-konstukte für eher unleserlich halte aber muss jeder selbst wissen :)

Und ihr vermeidet doch beide keine Doppelten einträge, oder?

Edit:
PHP:
$zahlen = array(); 
while (count($zahlen) < 6) { 
	$temp = mt_rand(1, 49);
	if(!in_array($temp, $zahlen)) {
		$zahlen[] = $temp; 
	}
}

lg
 
Zuletzt bearbeitet:
Was macht ihr hier eigentlich?
Die Lösung von Gumbo is doch perfekt...
[...]
Und ihr vermeidet doch beide keine Doppelten einträge, oder?

Gumbos is toll, aber ich wollt meinen Zweizeiler auch mal zeigen :) bin ich vorhin drauf gekommen und da war ich stolz wie Oskar :D deswegen.

Druckos ist wie er sagt Ziehen mit zurücklegen innerhalb eines bestimmtes Bereiches (also können sich Zahlen wiederholen - was auch Xanoskar scheinbar wollte).

Gumbos, deins und mein süßes kleines :suspekt: :p ist Ziehen ohne zurücklegen (da gibts keine Wiederholungen). Zumindest hab ich bei meinem nach knapp 100 Aufrufen keine wiederholung gesehen ;) das hat mir als Beweis gereicht. :rolleyes: ... Und ich will Mathematiker werden. tztz
 
Druckos ist wie er sagt Ziehen mit zurücklegen innerhalb eines bestimmtes Bereiches (also können sich Zahlen wiederholen - was auch Xanoskar scheinbar wollte).

Jetzt passiert es aber das manchmal eine Zahl doppelt vorkommt und das soll ja nicht.

Erst deswegen wurde der Thread doch eröffnet? :)
Verstehe ich hier was grundlegend falsch? :)

Naja ich denke das Thema is durch, oder dwex?

lg
 
Hallo.....ich mag und muss mal dieses thema wieder zum leben erwecken.

ich versuche es auch die ganze zeit mit diesem lottogenerator. 6 zufällige zahlen ziehen. zwischenspeichern und dann unsortiert ausgeben. keine derselben zahlen mehrfach. aussehen solls ganz simple und ohne implode.

Lottozahlen

Die gezogenen Zahlen sind: 3, 7, 24, 11, 34, 9,



so habe ich es im moment:

HTML:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Lottoziehung</title>
</head>
<body>
<h1>Lottozahlen</h1>

<?php

    $lottozahlen = [];
   
for ($a = 0; $a <= 5; $a++)
{
    $ziehung = mt_rand(1,49);

    if ($lottozahlen == $ziehung)
    {
    $a--;
    continue;
}
$lottozahlen[] = $ziehung;
}
foreach ($lottozahlen as $wert)
{
    echo $wert;
   
}
?>

</body>
</html>

danke für eure hilfe
 

Neue Beiträge

Zurück