PHP-Zufallszahl von 1 bis 10. Was ist neu in PHP7.1: Zufallszahlengenerierung. Zufallszahlen in JavaScript

Ich wurde schon ein paar Mal gefragt, wie ich auf meiner Website im Block „Smart Quotes“ zufällige Zitate mache. Als nächstes habe ich herausgefunden, dass das Problem darin liegt, dass die Leute nicht verstehen, wie man in PHP ein zufälliges Element aus einem Array ausgibt. Die Aufgabe ist einfach, aber da dennoch Fragen auftauchen, müssen diese beantwortet werden.

Den Code gebe ich dir gleich. Nehmen wir an, es gibt ein Array mit einer Reihe von Anführungszeichen. Und Sie müssen eine davon zufällig auswählen und ausgeben:

Der entscheidende Punkt ist, eine Zufallszahl zu erhalten. Alles was Sie tun müssen, ist die richtigen Grenzen zu setzen. Wenn Sie ein zufälliges Element über die gesamte Länge des Arrays auswählen müssen, liegt der Wert zwischen 0 und (Array-Länge minus 1). Und dann ziehen Sie einfach ein Element aus dem Array mit dem resultierenden Zufallsindex heraus.

Für die Aufgabe mit Angeboten ist es besser, diese in einer Datenbank zu speichern. Wenn die Site sehr einfach ist, kann dies grundsätzlich in einer Textdatei erfolgen. Wenn es sich jedoch um eine Datenbank handelt, ist es besser, RAND() und LIMIT in der SQL-Abfrage zu verwenden, damit Sie sofort ein einzelnes und zufälliges Zitat aus der Datenbank erhalten.

Um eine Zufallszahl zu generieren, können Sie die PHP-Funktion rand() oder mt_rand() verwenden. Für die Benennung von Variablen, Dateien, die Erstellung von Schlüsselinformationen und die Gewährleistung der Sicherheit ergibt sich in der Praxis häufig die Anforderung, Zufallszahlen zu verwenden.

Zufälligkeit und Einzigartigkeit

Die PHP-Zufallsfunktion gibt es in zwei Varianten: rand() und mt_rand(). Es wird angenommen, dass der Algorithmus im ersten Fall einfacher ist und Pseudozufallszahlen generiert. Die zweite Option verfügt über einen schnelleren Algorithmus und bekannte mathematische Eigenschaften. Wenn Sie eine Zufallszahl benötigen, können Sie in den meisten Fällen eine Reihe von PHP-Zufallsaufrufen verwenden und eine eindeutige Zahlenkombination erhalten.

Wenn man Zahlen von 1 bis 26 oder von 1 bis 32 zugrunde legt und diese zufällig erhält, kann man Schlüsselinformationen als Folge lateinischer oder kyrillischer Buchstaben bilden. In diesem Fall handelt es sich bei PHP Random um eine Möglichkeit, eine Folge alphabetischer Informationen zu generieren, beispielsweise zum Testen von Kommunikationskanälen oder Algorithmen.

Eine Zufallszahl ist selten eindeutig, da sie gemäß dem Verteilungsgesetz einer Zufallsvariablen mehrfach vorkommen kann. Wenn Sie jedoch insbesondere die statischen Variablen PHP und Math.random der JavaScript-Sprache kombinieren, können Sie eine echte, einzigartige Zufallszahl erhalten, die sich im Laufe der Zeit nicht wiederholt.

Verwendung der Zeitfunktion

Mit der Zeitfunktion, sowohl in PHP als auch in JavaScript, können Sie eindeutige Zahlenkombinationen bilden, wenn zu einem bestimmten Zeitpunkt eine ausreichend große Anzahl von Ereignissen auftreten kann und die Zufallsvariable wiederholt wird.

Durch die Anwendung von PHP-Zufällen im Sekunden- oder Millisekundenbereich über einen großen Bereich möglicher Werte ist es möglich, einzigartige Zufallskombinationen aus Zahlen oder Buchstaben zu erhalten. Was sonst?

Durch die Kombination des Werts der Zeitfunktion, einer sequentiell wachsenden Zahl und PHP-Zufallszahlen können Sie eine zuverlässige Sicherheit der Client- und Server-Kommunikationskanäle gewährleisten, eindeutige Codes für Variablen erstellen und unvorhersehbare Ereignisse in Algorithmen generieren.

Ein PHP-Zufallszahlengenerator ist für die meisten Aufgaben eine hervorragende Lösung, insbesondere wenn Sie mit minimalem Aufwand schnell qualitativ hochwertige Ergebnisse erzielen müssen. Durch die Verwendung der Funktionen rand() und mt_rand in Verbindung mit sequentiell wachsenden Reihen von Zahlen oder Zeitwerten können Sie Zufallszahlen erhalten, die sich sowohl in Werten wiederholen als auch eindeutig sind.

Initialisiert den Zufallszahlengenerator. Syntax:

Void srand(int same)

Initialisiert den Zufallszahlengenerator mit dem Startwert.

Srand((double) microtime()*1000000);
$random = rand();
echo $random;

GETRANDMAX

Gibt die größtmögliche Zufallszahl zurück. Syntax:

Int getrandmax()

Diese Funktion gibt den Maximalwert zurück, der mit der Zrand() erhalten werden kann.

Normalerweise ist es 32767

Erzeugt eine Zufallszahl. Syntax:

Int rand()

Wenn diese Funktion mit den optionalen Parametern „min“ und „max“ aufgerufen wird, generiert sie eine Zufallszahl bis einschließlich dieser Parameter. Wenn die Parameter „min“ und „max“ fehlen, wird eine Zahl zwischen 0 und RAND_MAX zurückgegeben.

Damit diese Funktion ordnungsgemäß funktioniert, müssen Sie vor der Verwendung den Zufallszahlengenerator mit der Funktion srand() initialisieren.

lcg_value()

LCG-Pseudozufallszahlengenerator (PHP 4, PHP 5)

Beschreibung:

Float lcg_value (void)

lcg_value() gibt eine Pseudozufallszahl im Bereich (0, 1) zurück. Die Funktion kombiniert zwei Generatoren mit 2^31 - 85 und 2^31 - 249 in einer Periode.

mt_getrandmax()

Zeigt den größtmöglichen Zufallswert an (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beschreibung:

Int mt_getrandmax (void)

Zeigt den maximalen Wert an, der von mt_rand() zurückgegeben werden kann

mt_rand()

Erzeugt den besten Zufallswert (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beschreibung:

int mt_rand()

Viele ältere Versionen von Zufallszahlengeneratoren weisen fragwürdige Eigenschaften auf und sind langsam. Standardmäßig verwendet PHP die Funktion rand(), um Zufallszahlen zu generieren. Die Funktion mt_rand() ist ein guter Ersatz. Es verwendet einen Zufallszahlengenerator, der viermal schneller als rand() ist, und verwendet Mersenne Twister.

Ohne die optionalen Min- und Max-Argumente aufgerufen, gibt mt_rand() einen pseudozufälligen Wert zwischen 0 und RAND_MAX zurück. Wenn Sie beispielsweise Zufallswerte zwischen 5 und einschließlich 15 benötigen, suchen Sie nach mt_rand (5, 15).

Beispiel für die Verwendung von mt_rand()

Das Ergebnis der Ausführung dieses Beispiels wird etwa so aussehen:

1604716014
1478613278
6

Kommentar

Hinweis: In Versionen vor 3.0.7 gab der zweite Parameter der Funktion den Zahlenbereich an. Um in diesen Versionen beispielsweise Zufallszahlen zwischen 5 und 15 zu erhalten, müssen Sie die Funktion mt_rand(5, 11) angeben.

mt_srand()

Legt den Anfangswert des besten Zufallszahlengenerators fest (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beschreibung:

Void mt_srand()

Legt den Anfangswert des Zufallszahlengenerators mithilfe von Seed fest. Ab PHP 4.2.0 ist Seed optional und die Standardeinstellungen für Zufallswerte entfallen.

Beispiel für die Verwendung von mt_srand()

Hinweis: Ab PHP 4.2.0 ist es nicht mehr notwendig, den Zufallszahlengenerator mit srand() oder mt_srand() zu initialisieren, da dies nun automatisch erfolgt.

Technisch gesehen ist der Begriff „Zufallszahlengenerator“ Unsinn, da Zahlen selbst nicht zufällig sind. Ist beispielsweise 100 eine Zufallszahl? Was ist mit 25? Was dieser Begriff eigentlich bedeutet, ist, dass er eine Folge von Zahlen erzeugt, die zufällig erscheinen. Dies wirft eine schwierigere Frage auf: Was ist eine Folge von Zufallszahlen? Die einzig richtige Antwort: Eine Folge von Zufallszahlen ist eine Folge, in der alle Elemente keinen Zusammenhang haben. Diese Definition führt zu dem Paradox, dass jede Sequenz entweder zufällig oder nicht zufällig sein kann, je nachdem, wie die Sequenz erhalten wird. Zum Beispiel die folgende Zahlenfolge
1 2 3 4 5 6 7 8 9 0
wurde erhalten, indem die oberste Zeile der Tastatur der Reihe nach eingegeben wurde, sodass die Reihenfolge nicht als zufällig generiert betrachtet werden kann. Was aber, wenn Sie die gleiche Reihenfolge erhalten, wenn Sie die nummerierten Tennisbälle aus dem Fass nehmen? In diesem Fall handelt es sich bereits um eine zufällig generierte Sequenz. Dieses Beispiel zeigt, dass die Zufälligkeit einer Sequenz davon abhängt, wie sie erhalten wurde, und nicht von der Sequenz selbst.

Denken Sie daran, dass eine computergenerierte Zahlenfolge deterministisch ist: Jede Zahl außer der ersten hängt von den Zahlen davor ab. Technisch bedeutet dies, dass ein Computer nur eine quasizufällige Zahlenfolge erzeugen kann, d. h. Tatsächlich sind sie nicht wirklich zufällig. Dies ist jedoch für die meisten Aufgaben ausreichend und der Einfachheit halber werden solche Sequenzen als zufällig bezeichnet. Eine sehr interessante Methode wurde von John von Neumann entwickelt; es wird oft als quadratischer Mittelwert bezeichnet. Bei dieser Methode wird die vorherige Zufallszahl quadriert und dann werden die mittleren Ziffern aus dem Ergebnis extrahiert. Wenn Sie beispielsweise Zahlen mit drei Ziffern erstellen und die vorherige Zahl 121 war, ergibt das Quadrieren das Ergebnis 14641. Das Isolieren der mittleren drei Ziffern ergibt die nächste Zufallszahl 464. Der Nachteil dieser Methode besteht darin, dass sie einen sehr hohen Wert hat kurze Wiederholungsperiode, Zyklus genannt. Aus diesem Grund wird diese Methode heute nicht mehr angewendet. Moderne Methoden zur Generierung von Zufallszahlen sind wesentlich komplexer.

Zufallszahlen in PHP

PHP verfügt über zwei Gruppen von Funktionen zum Arbeiten mit Zufallszahlen. Rein äußerlich sind sie durch das Präfix mt_ für alle Funktionen einer der Gruppen zu unterscheiden.

Veraltete Funktionen
Rand-Funktion Gibt eine Ganzzahl zwischen Null und dem Wert von RAND_MAX (also 32767) zurück. Kann zwei optionale ganzzahlige Parameter haben – wenn sie angegeben werden, wird eine Zufallszahl vom ersten bis zum zweiten Parameter generiert.

Echo rand(); Echo Rand(1.100); // Gib eine Zufallszahl von 1 bis 100 aus

Funktionsrand. Gibt die Folge von Zufallszahlen an, die von der Rand-Funktion erzeugt werden. Es hat einen ganzen Parameter – für unterschiedliche Werte dieses Parameters erzeugt Rand unterschiedliche Zahlenfolgen. Die srand-Funktion muss nur einmal vor allen Aufrufen der rand-Funktion aufgerufen werden. Anwendungsbeispiel:

Srand(1288); // Initialisiere den Zufallszahlengenerator for($i=0; $iquery("SELECT COUNT(*) AS count FROM quotes");
if ($row = $sth->fetchRow()) (
$count = $row;
) anders (
die ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("SELECT quote FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) (
$row drucken.

"\N";
}

Dieses Code-Snippet bestimmt die Gesamtzahl der Zeilen in der Tabelle, generiert eine Zufallszahl aus diesem Bereich und verwendet dann LIMIT $random,1, um eine Zeile aus der Tabelle ab Position $random auszuwählen. In MySQL Version 3.23 oder höher ist eine alternative Option möglich:

$sth = $dbh->query("SELECT quote FROM quotes ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
$row drucken. "\N";
}

In diesem Fall sortiert MySQL zunächst die Zeilen nach dem Zufallsprinzip und gibt dann die erste Zeile zurück.