5
Unterschiedliche Zufallszahlen generieren in PHP
Manchmal kann es nötig sein eine Liste mit unterschiedlichen Zufallszahlen zu erstellen. Ein mögliches Anwendungsszenario hierfür könnte zum Beispiel ein Gewinnspiel sein, bei dem die Gewinner zufällig ausgewählt werden, ein einzelner Teilnehmer jedoch nicht mehr als einmal gewinnen soll. Wie das in PHP funktioniert, zeigt euch das nachfolgende Snippet.
<?php
//Wir legen eine Array mit den Zahlen an, aus denen
//die Zufallszahlen gewählt werden sollen
$array = range($minimum, $maximum);
//Wir initialisieren den Zufallszahlengenerator
srand ((double)microtime()*1000000);
//Die Schleife ermittelt in jedem Durchlauf eine Zufallszahl
for($x = 0; $x < $AnzahlDerZufallszahlen; $x++)
{
//Es wird eine Zufahlszahl generiert
$i = rand(1, count($array))-1;
//Die generierte Zufallszahl dient als Index für das Array
//mit den Zahlen aus denen wir wählen
$erg[] = $array[$i];
//Die gewählte Zufallszahl wird aus dem Auswahlzahlen-
//Array entfernt, damit Sie nicht doppelt gewählt werden kann
array_splice($array, $i, 1);
}
?>
Hinweis: $minimum, $maximum und $AnzahlDerZufallszahlen müsst ihr natürlich vorher noch festlegen.
Viele Grüße,
Raffi

Wie kann ich die Zufallszahlen jetzt ausgeben?
Ausgeben kannst du das Array mit den Zufallszahlen mit der Funktion print_r() (siehe: http://php.net/manual/de/function.print-r.php )
Konkret für mein Beispiel würde das so aussehen:
< ?php
print_r($erg);
?>
Viele Grüße,
Raffi
[...] mich René in den Kommentaren zu meinem Artikel über die Generierung von unterschiedlichen Zufallszahlen in PHP darauf hingewiesen hat, dass es sinnvoller sei, die PHP-Funktion mt_rand() anstelle von rand() zur [...]
Moin,
man sollte für ein Gewinnspiel oder so etwas nie rand() benutzen. Die Funktion liefert keine wirklichen “Zufallszahlen”. Lieber mt_rand() benutzen.
Lg
René
Hallo René,
danke für den Hinweis. Ich habe mich noch mal ein wenig schlau gemacht. Das größte Argument für mt_rand(), dass ich finden konnte ist aber lediglich die höhere Geschwindigkeit. Worauf genau spielst du an?
Viele Grüße,
Raffi