Zufallszahlen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ahnung
anzahl
array
auswahl
beispiel
beitrag
count
doubeln
durcheinander
element
fehler
leiden
manual
page
reihenfolge
schleifen
shuffle
tabelle
variable
variant
-
Halo, ich w?rde gerne Zufallszahlen mit php ermitteln
Also, ich meine das so:
Er soll sich eine Zahl aussuchen:
Zur auswahl stehen 1 5 16 45 49 20 4 6 und 9
Wenn er sich nun die Zahl 16 ausgesucht hat,
dann soll in einer anderen Variable noch eine der ?brigen Zahlen per Zufall ermittelt werden.
Ich hoffe das war verst?ndlich -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Versuch es mal damit(korrigierte, weniger voreilige Version):
//Oh da war ich wohl ?bereilt:
//In Deinem Fall w?rde ich raten, die Zahlen in ein //Array $allezahlen zu speichern,
$allezahlen[]="1";
$allezahlen[]="5";
// usw., bis alle erlaubten Zahlen drin sind
// dann die Zufallsfunktion
mt_srand((double)microtime()*1000000);
$zufall=mt_rand('0',count($allezahlen) - 1);
//Variable Zufall als Index verwenden:
// so wird die soundsovielte
//im Array gespeicherte Zahl ausgegeben
echo $allezahlen[$zufall];
Die zweite Zahl suchst du genauso aus, ver?nderst aber die Variabel zufall in zufall2, machst aber noch eine Schleife rein, die ?berpr?ft, ob du nicht zweimal dieselbe Zahl ausgew?hlt hast, in diesem Fall wiederholst du einfahch dei Ausfall f?r zufall2 solange, bis zufall 2 ungleich zufall1 ist! ...
Beitrag ge?ndert am 12.04.2006 16:56 von btiwienie -
Ich will aber nicht jede Zahlt zwischen 1 und 28 haben.
Habe ich schon korrigiert, und au?erdem neben den Button geklickt und eine irrt?mliche Spam-Meldung abgeschickt- tut mir leid -
Kannst du mir dann vieleicht moch diese Schleife reinbauen, von Schleifen habe ich keum ahnung.
Beitrag ge?ndert am 12.04.2006 16:57 von speedtouch92
Mensch, ein bisschen programmieren solltest du aber k?nnen ...
Weil du es bist ...
while($zufall != $zufall2)
{
mt_srand((double)microtime()*1000000);
$zufall2=mt_rand('0',count($allezahlen) - 1);
}
echo $zufall2; -
Also, ich glaube da ist ein Fehler drin.
Mein Code sieht so aus:
$allezahlen[]="9"; $allezahlen[]="10"; $allezahlen[]="11"; $allezahlen[]="12"; $allezahlen[]="13"; $allezahlen[]="8"; $allezahlen[]="14"; $allezahlen[]="15"; $allezahlen[]="24"; $allezahlen[]="25"; $allezahlen[]="26"; $allezahlen[]="27"; $allezahlen[]="28"; $allezahlen[]="29"; $allezahlen[]="30"; $allezahlen[]="31"; $allezahlen[]="40"; $allezahlen[]="41"; $allezahlen[]="42"; $allezahlen[]="43"; $allezahlen[]="44"; $allezahlen[]="45"; $allezahlen[]="46"; $allezahlen[]="47"; $allezahlen[]="56"; $allezahlen[]="57"; $allezahlen[]="58"; $allezahlen[]="59"; $allezahlen[]="60"; $allezahlen[]="13"; // usw., bis alle erlaubten Zahlen drin sind // dann die Zufallsfunktion mt_srand((double)microtime()*1000000); $zufall=mt_rand('0',count($allezahlen) - 1); //Variable Zufall als Index verwenden: // so wird die soundsovielte //im Array gespeicherte Zahl ausgegeben while($zufall != $zufall2) { mt_srand((double)microtime()*1000000); $zufall2=mt_rand('0',count($allezahlen) - 1); } echo $zufall; echo "<br>"; echo $zufall2;
Das Problem ist aber:
1) ich muss das Zufallsprinzip so oft durchf?hren, bis alle Zahlen verwendet wurden.
2) $zufall und $zufall2 sind immer gleich (Das soll je eigentlich nicht sein)
3)$zufall ist manchmal auch 0, das will ich aber auch nicht.
Zu bewundern unter:
http://speedtouch92.sp.funpic.de/test.php
Beitrag ge?ndert am 12.04.2006 19:10 von speedtouch92 -
Ich hab mal ausm Tut
(http://www.gfx-world.net/index.php?page=tutorials/view_tut&setpos=Tutorials&id=101)
des drau? gemacht:
$z=array(); $c=0; while ($c<1) { mt_srand((double)microtime()*1000000); $rnd=mt_rand(1,50); if (!isset($z[$rnd])) { $z[$rnd]=1; $c++; } } $c=0; for ($i=1; $i<51; $i++) { if (isset($z[$i])) { echo "$i - "; $c++;} if ($c==6) { echo $c++;} } $c=0; while ($c<1) { mt_srand((double)microtime()*1000000); $rnd=mt_rand(1,50); if (!isset($z[$rnd])) { echo $rnd; $c++; } }
zu bestaunen unter http://1.0px.de/lima/zufall.php
es gibt nie zwei zahlen gleichzeitig aus und beinhaltet keine 0
hoffentlich ist es das was man auch ben?tigt
Beitrag ge?ndert am 12.04.2006 20:22 von regeniter -
Ich wei? nicht, wird da auch nur zwischen diesen Zahlen eine Zufallszahl ausgew?hlt?
9 10 11 12 13 8 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 13
Und wird keine Zahl zwei mal ausgegeben?
Und, wie kann ich das auf 30 Abfragen erweitern, sodass keine Zahl keiner vorher gezogenen gleicht? -
// array f?llen:
// Reihenfolge ist egal
$array = array(
1,
2,
3,
...
);
// Zahlen im Array "durcheinanderw?rfeln"
shuffle($array);
// Anzahl der zu ziehenden Zahlen
$max = 30;
if($max > count($array) )
print('Fehler: Es k?nnen nicht mehr Zahlen gezogen werden, als vorhanden sind!<br />');
// array_shift holt das erste Element eines Arrays
// und entfernt es aus dem Array
// so kann kein Element mehrfach gezogen werden
for($i = 0; $i < $max; $i++) {
$auswahl = array_shift($array);
printf('%s. gezogene Zahl: %s<br />', $i, $auswahl);
}
http://de.php.net/manual/de/function.shuffle.php
http://de.php.net/manual/de/function.array-shift.php
-
// array f?llen:
// Reihenfolge ist egal
$array = array(
1,
2,
3,
...
);
// Zahlen im Array "durcheinanderw?rfeln"
shuffle($array);
// Anzahl der zu ziehenden Zahlen
$max = 30;
if($max > count($array) )
print('Fehler: Es k?nnen nicht mehr Zahlen gezogen werden, als vorhanden sind!<br />');
// array_shift holt das erste Element eines Arrays
// und entfernt es aus dem Array
// so kann kein Element mehrfach gezogen werden
for($i = 0; $i < $max; $i++) {
$auswahl = array_shift($array);
printf('%s. gezogene Zahl: %s<br />', $i, $auswahl);
}
http://de.php.net/manual/de/function.shuffle.php
http://de.php.net/manual/de/function.array-shift.php
Hei?t dass, dass er %s durch die Zahl ersetzt?
Wenn ja, wie kann ich dass dann in eine tabelle eintragen alssen, wenn die tabelle so aussehen soll:
<table border="2"> <tr><td>Zahl 1</td><td>Zahl 2</td><td>Zahl 3</td><td>Zahl 4</td><td>Zahl 5</td><td>Zahl 6</td></tr> <tr><td>Zahl 7</td><td>Zahl 8</td><td>Zahl 9</td><td>Zahl 10</td><td>Zahl 11</td><td>Zahl 12</td></tr> <tr><td>Zahl 13</td><td>Zahl 14</td><td>Zahl 15</td><td>Zahl 16</td><td>Zahl 17</td><td>Zahl 18</td></tr> <tr><td>Zahl 19</td><td>Zahl 20</td><td>Zahl 21</td><td>Zahl 22</td><td>Zahl 23</td><td>Zahl 24</td></tr> <tr><td>Zahl 25</td><td>Zahl 26</td><td>Zahl 27</td><td>Zahl 28</td><td>Zahl 29</td><td>Zahl 30</td></tr> </table>
Es tut mir leid, wenn ich mich dumm stelle
Beitrag ge?ndert am 12.04.2006 23:16 von speedtouch92 -
hm...vllt solltest du die schleife wie folgt ?ndern?!
[php]while($zufall == $zufall2)
{
mt_srand((double)microtime()*1000000);
$zufall2=mt_rand('0',count($allezahlen) - 1);
}
echo $zufall2;
[/php]
denn die schleife soll ja solange durchlaufen werden, wie $zufall1 gleich $zufall 2 is, damit zwei verschiedene zahlen rauskommen...
und den array kannst du glaub ich auch anders gestalten, is vllt am ende n bissl ?bersichtlicher...
[php]
$zahlen1 = array(1,3,4,5,67,88,64,3,6,36,6);
[/php]
mfg -
So, jetzt habe ich mich doch herausgefordert gesehen:
1. Die Variante von Alopex ist nat?rlich die praktischste, habe ich aber an der einen oder anderen Stelle verbessert
2. Die Variante mit der while -Schleife geht aber auch, wenn man's richtig anstellt.
Beides im Quelltext hier:
<?php
//Unter Verwendung der Beitr?ge in
//http://www.lima-city.de/boards.php?m=thread&id=48166&page=0#447819
//Besonderer Dank an alopex
// ######## 1. Variante ###############
echo "<br>"."Zwei Zufallszahlen berechnen:"."<br>";
//DAs Array mit den richtigen Zahlen f?llen, hier ein Beispiel
$array = array(1,2,3,17, 19,23,24,27,49);
//W?rfelt die Reihenfolge nach Zufall durcheinander
shuffle($array);
// Anzahl der zu ziehenden Zahlen festlegen, hier z,. B. 2
$max = 2;
//Sicherheitshalber: Falls das Array zu klein ist, um die Zahlenmenge zu ziehen:
//Warnmeldung ausgeben!
if($max > count($array) ){
print('Fehler: Es k?nnen nicht mehr Zahlen gezogen werden, als vorhanden sind!<br />');
}
// array_shift holt das erste Element eines Arrays
// und entfernt es aus dem Array
// so kann kein Element mehrfach gezogen werden
//Ausgangspunkt des Z?hlers ist 1, anders als bei alopex!
//um die nat?rliche Z?hlung bei der Ausgabe zu gew?hrleisten
for($i = 1; $i <= $max; $i++) {
$auswahl = array_shift($array);
printf('%s. gezogene Zahl: %s<br />', $i, $auswahl);
}
// ######## 2. Variante ###############
//Achtung alle Variabeln-Namen sind durch "neu"-Zusatz ge?ndert, sonst gibt's durcheinander
echo "<br>"."Zwei Zufallszahlen berechnen, eine Variante:"."<br>";
//Das Array mit den richtigen Zahlen f?llen, hier ein Beispiel
$allezahlenneu = array(1,2,3,17,19,23,24,27,49);
// dann die Zufallsfunktion
mt_srand((double)microtime()*1000000);
$neuerzufall=mt_rand('0',count($allezahlenneu) - 1);
//Variable Zufall als Index verwenden:
// so wird die soundsovielte im Array gespeicherte Zahl ausgegeben
echo "<br>"."Die erste gezogene Zahl heißt $allezahlenneu[$neuerzufall]"."<br>";
//Zur Ermittlung der zweiten Zufallszahl soll sichergestellt werden,
//dass diese nicht identisch mit der ersten ist.
//Daher wird die Zahl zun?chst gleichgesetzt und dann neu errechnet,
// bis eine andere Zahl per Zufall herauskommt!
$neuerzufall2=$neuerzufall;
$i="0";
while($neuerzufall == $neuerzufall2)
{
mt_srand((double)microtime()*1000000);
$neuerzufall2 = mt_rand('0',count($allezahlenneu) - 1);
}
echo "<br>"."Die zweite gezogene Zahl heißt $allezahlenneu[$neuerzufall2]";
?>
Such Dir eine Variatne aus und dann
viel Spa? damit speedtouch92 !! -
<table border="2"> <tr><td>Zahl 1</td><td>Zahl 2</td><td>Zahl 3</td><td>Zahl 4</td><td>Zahl 5</td><td>Zahl 6</td></tr> <tr><td>Zahl 7</td><td>Zahl 8</td><td>Zahl 9</td><td>Zahl 10</td><td>Zahl 11</td><td>Zahl 12</td></tr> <tr><td>Zahl 13</td><td>Zahl 14</td><td>Zahl 15</td><td>Zahl 16</td><td>Zahl 17</td><td>Zahl 18</td></tr> <tr><td>Zahl 19</td><td>Zahl 20</td><td>Zahl 21</td><td>Zahl 22</td><td>Zahl 23</td><td>Zahl 24</td></tr> <tr><td>Zahl 25</td><td>Zahl 26</td><td>Zahl 27</td><td>Zahl 28</td><td>Zahl 29</td><td>Zahl 30</td></tr> </table>
Ich habe mich f?r die erste Version entschieden.
Wie muss ich den Inhalt der schleife ?ndern, sodass der Code oben entsteht? -
Hi, ich habe gerade gemerkt, dass die folgende ausgabe erfolgt:
1. gezogene Zahl: 25
2. gezogene Zahl: 30
3. gezogene Zahl: 14
4. gezogene Zahl: 13
5. gezogene Zahl: 31
6. gezogene Zahl: 32
7. gezogene Zahl: 46
8. gezogene Zahl: 60
9. gezogene Zahl: 10
10. gezogene Zahl: 26
11. gezogene Zahl: 9
...
...
...
Die Zahlen werden so ausgegeben:
for($i = 1; $i <= $max; $i++) { $auswahl = array_shift($array); printf('%s. gezogene Zahl: %s<br />', $i, $auswahl); }
Wenn ich nun das erste %s weglasse, weil ich das 1. gezogene Zahl nicht haben will, dann zeigt er statt den Zufallszahlen nur die zahlen von 1 bis 11 an.
Wie kann ich das ?ndern?
Beitrag ge?ndert am 17.04.2006 19:12 von speedtouch92 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage