Php is de beste willekeurige nummergenerator. Willekeurige selectie uit een array in PHP. Willekeurige getallen in PHP

Initialiseert de generator voor willekeurige getallen. Syntaxis:

Leegte streng (int zaad)

Initialiseert de generator voor willekeurige getallen met de startwaarde.

Srand((dubbel) microtime()*1000000);
$ willekeurig = rand();
echo $willekeurig;

GETRANDMAX

Retourneert het grootst mogelijke willekeurige getal. Syntaxis:

Int getrandmax()

Deze functie retourneert de maximale waarde die kan worden verkregen met behulp van de functie voor het genereren van willekeurige getallen rand().

Meestal is dit 32767

Genereert een willekeurig getal. Syntaxis:

Int-rand()

Wanneer deze functie wordt aangeroepen met de optionele min- en max-parameters, genereert deze een willekeurig getal tot en met deze parameters. Als de min- en max-parameters ontbreken, wordt een getal tussen 0 en RAND_MAX geretourneerd.

Om deze functie correct te laten werken, moet u, voordat u deze gebruikt, de generator voor willekeurige getallen initialiseren met de functie srand().

lcg_waarde()

LCG pseudo-willekeurige nummergenerator (PHP 4, PHP 5)

Beschrijving:

Zwevende lcg_value (ongeldig)

lcg_value() retourneert een pseudowillekeurig getal in het bereik (0, 1). De functie combineert twee generatoren met 2^31 - 85 en 2^31 - 249 in een periode.

mt_gerandmax()

Toont de grootst mogelijke willekeurige waarde (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beschrijving:

Int mt_getrandmax (ongeldig)

Toont de maximale waarde die kan worden geretourneerd door mt_rand()

mt_rand()

Genereert de beste willekeurige waarde (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beschrijving:

int mt_rand()

Veel oudere versies van generatoren voor willekeurige getallen hebben twijfelachtige kenmerken en zijn traag. Standaard gebruikt PHP de functie rand() om willekeurige getallen te genereren. De functie mt_rand() is een goede vervanging. Het maakt gebruik van een generator voor willekeurige getallen die 4 keer sneller is dan rand() en maakt gebruik van Mersenne Twister.

Aangeroepen zonder de optionele min- en max-argumenten, retourneert mt_rand() een pseudo-willekeurige waarde variërend tussen 0 en RAND_MAX. Als je bijvoorbeeld willekeurige waarden tussen 5 en 15 wilt krijgen, zoek dan naar mt_rand (5, 15).

Voorbeeld van het gebruik van mt_rand()

Het resultaat van het uitvoeren van dit voorbeeld zal ongeveer als volgt zijn:

1604716014
1478613278
6

Opmerking

Opmerking: in versies vóór 3.0.7 specificeerde de tweede parameter van de functie het bereik van getallen. Om in deze versies bijvoorbeeld willekeurige getallen tussen 5 en 15 te verkrijgen, moet u de functie mt_rand(5, 11) opgeven.

mt_srand()

Stelt de beginwaarde in van de beste generator voor willekeurige getallen (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Beschrijving:

Ongeldig mt_srand()

Stelt de beginwaarde van de generator voor willekeurige getallen in met behulp van zaad. Vanaf PHP 4.2.0 is Seed optioneel en zijn de standaardinstellingen voor willekeurige waarden weggelaten.

Voorbeeld van het gebruik van mt_srand()

Opmerking: vanaf PHP 4.2.0 is het niet langer nodig om de generator voor willekeurige getallen te initialiseren met srand() of mt_srand(), omdat dit nu automatisch gebeurt.

Technisch gezien is de term 'generator voor willekeurige getallen' onzin, aangezien getallen zelf niet willekeurig zijn. Is 100 bijvoorbeeld een willekeurig getal? Hoe zit het met 25? Wat deze term eigenlijk betekent, is dat er een reeks getallen ontstaat die willekeurig verschijnen. Dit roept een moeilijkere vraag op: wat is een reeks willekeurige getallen? Het enige juiste antwoord: een reeks willekeurige getallen is een reeks waarin alle elementen geen verband houden. Deze definitie leidt tot de paradox dat elke reeks willekeurig of niet-willekeurig kan zijn, afhankelijk van hoe de reeks wordt verkregen. Bijvoorbeeld de volgende reeks getallen
1 2 3 4 5 6 7 8 9 0
werd verkregen door de bovenste regel van het toetsenbord in volgorde te typen, dus de reeks kan niet als willekeurig gegenereerd worden beschouwd. Maar wat als je dezelfde volgorde krijgt als je de genummerde tennisballen uit de ton haalt? In dit geval is het al een willekeurig gegenereerde reeks. Dit voorbeeld laat zien dat de willekeur van een reeks afhangt van de manier waarop deze is verkregen, en niet van de reeks zelf.

Bedenk dat een door de computer gegenereerde reeks getallen deterministisch is: elk getal, behalve het eerste, hangt af van de getallen ervoor. Technisch gezien betekent dit dat alleen een quasi-willekeurige reeks getallen door een computer kan worden gegenereerd, d.w.z. in feite zijn ze niet echt willekeurig. Dit is echter voldoende voor de meeste taken en voor de eenvoud zullen dergelijke reeksen willekeurig worden genoemd. Een zeer interessante methode werd ontwikkeld door John von Neumann; het wordt vaak het root mean square genoemd. Bij deze methode wordt het vorige willekeurige getal gekwadrateerd en worden vervolgens de middelste cijfers uit het resultaat gehaald. Als u bijvoorbeeld getallen maakt met drie cijfers en het vorige getal was 121, geeft het kwadrateren van het resultaat het resultaat 14641. Het kwadrateren van de middelste drie cijfers levert het volgende willekeurige getal 464 op. Het nadeel van deze methode is dat deze een zeer korte herhalingsperiode, een zogenaamde cyclus. Om deze reden wordt deze methode tegenwoordig niet gebruikt. Moderne methoden voor het genereren van willekeurige getallen zijn veel complexer.

Willekeurige getallen in PHP

PHP heeft twee groepen functies voor het werken met willekeurige getallen. Puur extern kunnen ze worden onderscheiden door het voorvoegsel mt_ voor alle functies van een van de groepen.

Verouderde functies
rand-functie Retourneert een geheel getal tussen nul en de waarde van RAND_MAX (dit is 32767). Kan twee optionele geheeltallige parameters hebben. Als deze zijn opgegeven, wordt er een willekeurig getal gegenereerd van de eerste parameter naar de tweede.

Echo-rand(); echorand(1.100); // Geef een willekeurig getal van 1 tot 100

Functie streng. Specificeert de reeks willekeurige getallen die door de randfunctie worden geproduceerd. Het heeft een volledige parameter - voor verschillende waarden van deze parameter zal rand verschillende reeksen getallen produceren. De srand-functie hoeft slechts één keer te worden aangeroepen voordat alle oproepen naar de rand-functie plaatsvinden. Gebruiksvoorbeeld:

Srand(1288); // Initialiseer de generator voor willekeurige getallen voor($i=0; $i