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

Unterschiedliche Zufallszahlen generieren in PHPÜber den Autor: Dieser Artikel, sowie 363 andere Artikel auf code-bude.net, wurden von Raffael geschrieben. – Seit 2011 blogge ich hier über Programmierung, meine Software, schreibe Tutorials und versuche mein Wissen, so gut es geht, mit meinen Lesern zu teilen. Zudem schreibe ich auf derwirtschaftsinformatiker.de über Themen meines Studiums.  //    •  • Facebook  • Twitter


4 Kommentare

  1. Anonymsays:

    Wie kann ich die Zufallszahlen jetzt ausgeben?

  2. Renésays:

    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é

    • Raffisays:

      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

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.