PHP Rand Function mit Angabe eines Intervalls

Ist die Erzeugung von Zufallswerten nötig, die in einem bestimmten Intervall liegen, so bietet die Funktion rand eine Möglichkeit diesen Intervall anzugeben. Hierzu unterstützt die Funktion rand zwei optionale Parameter, welche die obere sowie die untere Grenze eines gewünschten Zahlenbereichs angibt. Der erste an rand übergebene Wert gibt den Mindestwert, der gegebenenfalls als zweiten Parameter angegebene Wert (beides Integer-Werte) bestimmt den Höchstwert an. Die beiden Grenzwerte werden, falls diese nicht angegeben wurden, mit 0 (als Minimalwert) und RAND_MAX für den Maximalwert vorbelegt.

Dabei ist die Konstante RAND_MAX vom verwendeten Betriebssytem abhängig (auf Windows-Systemen ist RAND_MAX meist mit dem Wert 32768 belegt). Wie hoch – oder auch wie niedrig – dieser Wert ist, kann mit der Funktion getrandmax ermittelt werden. Durch Angabe eines Intervalls kann auch die Banner-Rotation aus dem letzten Beispiel mit einem Aufruf von in der Form rand (0, sizeof ($banners) - 1) umgesetzt werden. Folgendes Beispiel gibt wiederum Zufallszahlen mit echo aus, wobei verschiedene Grenzwerte bei der Erzeugung berücksichtigt werden.

<?php
    // Maximaler Wert, der durch rand geliefert wird
    echo 'RAND_MAX: ' . getrandmax () . '<br>';

    // Generator mit einem Seed initialisieren (Systemzeit des Webservers)
    srand (time ());
    // Erzeugen von Zufallswerten, die direkt ausgegeben werden.
    // Als Wertebereich werden Zahlen von 0 bis 255 gewählt.
    echo 'Zufallswerte zwischen 0 und 255: ';
    for ($i = 0; $i < 10; $i++)
        echo rand (0, 255) . ' ';
    // HTML-Code für einen Zeilenumbruch ansgeben
    echo '<br>';

    // Ausgabe von Zahlenwerten zwischen 1 und 5
    echo 'Zufallswerte zwischen 1 und 5: ';
    for ($i = 0; $i < 10; $i++)
        echo rand (1, 5) . ' ';
?>

RAND_MAX: 2147483647
Zufallswerte zwischen 0 und 255: 82 97 111 151 197 185 225 87 24 97
Zufallswerte zwischen 1 und 5: 2 2 1 3 2 4 2 5 2 2

mt_rand und mt_srand als Alternative zu rand und srand

Aufgrund der Tatsache, dass die Erzeugung von Pseudozufallszahlen mittels der Funktion rand die vom Betriebssystem implementierten Funktionen zur Erzeugung dieser Zufallswerte nutzt, ist deren Qualität nicht unbedingt optimal. Dies hat im Wesentlichen zwei Gründe: Zum Einen liefert die Systemfunktion ihre Zufallszahlen mit einer recht geringen Periodenlänge – was an der hinter dem Generator steckenden Funktion zur Berechnung der Folgewerte liegt. Zum Anderen ist die Verteilungscharakteristik – ein guter Zufallszahlengenerator soll möglichst gleichverteilte Zufallswerte liefern – der durch das Betriebssystem implementierten Funktionen nicht besonders gut.

Um die Qualität der Zufallszahlen (bessere Streuung bzw. Verteilung) zu verbessern, bietet sich die Funktion mt_rand an. Durch deren Nutzung kommt auch ein weiterer Aspekt bei der Bewertung eines Zufallszahlengenerators, das Laufzeitverhalten des Generators, zur Geltung. Auf vielen Systemen läuft der Zufallszahlengenerator des Betriebssystems deutlich langsamer als die Funktion mt_rand. Diese liefert ihre Werte zum Teil viermal schneller als die Funktion rand. Bei modernen Betriebssystemen (beispielsweise aktuellen Linux-Systemen) entfällt der genannte Geschwindigkeitsvorteil, da diese Systeme mittlerweile ebenfalls modernere Zufallszahlengeneratoren einsetzen und über Systemfunktionen zur Verfügung stellen. Im nächsten Beispiel werden wiederum Zufallszahlen nach deren Konvertierung in ein String unter Verwendung von echo im Browserfenster ausgegeben.

<?php
    // Maximaler Wert für Zufallszahlen von mt_rand
    echo 'RAND_MAX bei Nutzung von mt_rand: ' . mt_getrandmax () . '<br>';

    // Auch hier wird der Generator initialisiert
    mt_srand (time ());
    // Zufallszahlen aus 0 bis RAND_MAX erzeugen
    echo 'Zufallswerte zwischen 0 und RAND_MAX: ';
    for ($i = 0; $i < 10; $i++)
        echo mt_rand () . ' ';
    // Zeilenumbruch für die Browserausgabe erzeugen
    echo '<br>';

    // Ausgabe von Zufallswerten zwischen 0 und 9
    echo 'Zufallswerte zwischen 0 und 9: ';
    for ($i = 0; $i < 10; $i++)
        echo mt_rand (0, 9) . ' ';
?>

RAND_MAX bei Nutzung von mt_rand: 2147483647
Zufallswerte zwischen 0 und RAND_MAX: 1336130850 285052828 2124116202 1578447056 2006029320 283329318 867741916 706512631 473408816 471470492
Zufallswerte zwischen 0 und 9: 7 5 8 9 3 2 8 9 2 6

Letzte Posts aus unserem Forum

Webentwickler Konferenz in Hamburg

Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr

von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortet

bedingte Weiterleitung in Kontaktformularen

Hallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr

von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortet

Gesucht: Auslesen einer externen Website

Mein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr

von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 Antwort
Letzter Beitrag: Donnerstag, 3. Februar 2011 14:43 von alm

Hallo, am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr

Zeilenumbruch in der Bildergalerie-Beschriftung

Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr

von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 Antwort
Letzter Beitrag: Freitag, 28. Januar 2011 10:16 von alm

Hallo, ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr

Bildergalerie mehrfach einbinden

Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr

von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 Antworten
Letzter Beitrag: Mittwoch, 29. Dezember 2010 20:50 von Saga

Hallo Alex, die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr

¬ Tutorials



¬ Insolvenzrecht