Php náhodné číslo od 1 do 10. Čo je nové v PHP7.1: generovanie náhodných čísel. Náhodné čísla v JavaScripte

Už som sa niekoľkokrát spýtal, ako robím náhodné citácie na mojej webovej stránke v bloku „Inteligentné ponuky“. Ďalej sa mi podarilo zistiť, že problém je v tom, že ľudia nerozumejú tomu, ako vypísať náhodný prvok z poľa v PHP. Úloha je jednoduchá, no napriek tomu, keďže vznikajú otázky, je potrebné na ne odpovedať.

Hneď vám dám kód. Povedzme, že existuje pole so sadou úvodzoviek. A musíte vybrať jeden náhodný z nich a výstup:

Kľúčovým bodom je získanie náhodného čísla. Stačí si nastaviť správne hranice. Ak potrebujete vybrať náhodný prvok po celej dĺžke poľa, potom je to od 0 do (dĺžka poľa mínus 1). A potom jednoducho vytiahnite prvok z poľa s výsledným náhodným indexom.

Pokiaľ ide o úlohu s úvodzovkami, je lepšie ich uložiť do databázy. V zásade, ak je stránka veľmi jednoduchá, dá sa to urobiť v textovom súbore. Ale ak v databáze, potom je lepšie použiť RAND() a LIMIT v SQL dotaze, aby ste okamžite dostali jednu a náhodnú cenovú ponuku z databázy.

Na vygenerovanie náhodného čísla môžete použiť funkciu PHP rand() alebo mt_rand(). Požiadavka na používanie náhodných čísel sa v praxi často objavuje pri pomenovaní premenných, súborov, vytváraní kľúčových informácií a zaistení bezpečnosti.

Náhodnosť a jedinečnosť

Náhodná funkcia PHP prichádza v dvoch variantoch: rand() a mt_rand(). Predpokladá sa, že algoritmus v prvom prípade je jednoduchší a generuje pseudonáhodné čísla. Druhá možnosť má rýchlejší algoritmus a dobre známe matematické charakteristiky. Vo väčšine prípadov, keď potrebujete získať náhodné číslo, môžete použiť sériu náhodných volaní PHP a získať jedinečnú kombináciu čísel.

Ak ako základ použijete čísla od 1 do 26 alebo od 1 do 32 a získate ich náhodne, kľúčové informácie môžete vytvoriť ako postupnosť písmen latinky alebo cyriliky. V tomto prípade je PHP random spôsob generovania sekvencie abecedných informácií, napríklad na účely testovania komunikačných kanálov alebo algoritmov.

Náhodné číslo je zriedkavo jedinečné, pretože sa môže objaviť viackrát podľa distribučného zákona náhodnej premennej. Ale ak skombinujete najmä statickú premennú PHP & Math.random jazyka JavaScript, môžete získať skutočné jedinečné náhodné číslo, ktoré sa nebude časom opakovať.

Použitie funkcie času

Časová funkcia, PHP aj JavaScript, vám umožňuje vytvárať jedinečné kombinácie čísel, len zriedka, keď sa v jednom okamihu môže vyskytnúť dostatočne veľký počet udalostí a náhodná premenná sa bude opakovať.

Aplikovaním PHP náhodne v rozsahu sekúnd alebo milisekúnd vo veľkom rozsahu možných hodnôt je možné získať jedinečné náhodné kombinácie čísel alebo písmen. Čo ešte?

Kombináciou hodnoty časovej funkcie, postupne narastajúceho počtu a PHP náhodnosti môžete zaistiť spoľahlivú bezpečnosť komunikačných kanálov klienta a servera, vytvárať jedinečné kódy pre premenné a generovať nepredvídateľné udalosti v algoritmoch.

PHP generátor náhodných čísel je vynikajúcim riešením pre väčšinu úloh, najmä ak potrebujete rýchlo získať vysokokvalitné výsledky s minimálnym úsilím. Používanie funkcií rand() a mt_rand v spojení s postupne rastúcimi sériami čísel alebo časových hodnôt vám umožňuje získať náhodné čísla, ktoré sa opakujú v hodnotách a sú jedinečné.

Inicializuje generátor náhodných čísel. Syntax:

Void srand (int seed)

Inicializuje generátor náhodných čísel s počiatočnou hodnotou.

Srand((dvojitý) mikročas()*1000000);
$random = rand();
echo $random;

GETRANDMAX

Vráti najväčšie možné náhodné číslo. Syntax:

Int getrandmax()

Táto funkcia vracia maximálnu hodnotu, ktorú možno získať pomocou funkcie generovania náhodných čísel rand().

Zvyčajne je to 32767

Vygeneruje náhodné číslo. Syntax:

Int rand()

Pri volaní s voliteľnými parametrami min a max táto funkcia vygeneruje náhodné číslo až do týchto parametrov vrátane. Ak chýbajú parametre min a max, vráti sa číslo v rozsahu od 0 do RAND_MAX.

Aby táto funkcia fungovala správne, pred jej použitím je potrebné inicializovať generátor náhodných čísel pomocou funkcie srand().

lcg_value()

LCG generátor pseudonáhodných čísel (PHP 4, PHP 5)

Popis:

Float lcg_value (void)

lcg_value() vracia pseudonáhodné číslo v rozsahu (0, 1). Funkcia kombinuje dva generátory s 2^31 - 85 a 2^31 - 249 za periódu.

mt_getrandmax()

Zobrazuje najväčšiu možnú náhodnú hodnotu (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Popis:

Int mt_getrandmax (neplatné)

Zobrazuje maximálnu hodnotu, ktorú môže vrátiť mt_rand()

mt_rand()

Generuje najlepšiu náhodnú hodnotu (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Popis:

int mt_rand()

Mnohé staršie verzie generátorov náhodných čísel majú sporné vlastnosti a sú pomalé. PHP štandardne používa funkciu rand() na generovanie náhodných čísel. Funkcia mt_rand() je dobrou náhradou. Používa generátor náhodných čísel, ktorý je 4-krát rýchlejší ako rand() a používa Mersenne Twister.

Volaná bez voliteľných argumentov min a max, mt_rand() vracia pseudonáhodnú hodnotu v rozsahu od 0 do RAND_MAX. Ak potrebujete získať napríklad náhodné hodnoty medzi 5 a 15 vrátane, vyhľadajte mt_rand (5, 15).

Príklad použitia mt_rand()

Výsledkom spustenia tohto príkladu bude niečo také:

1604716014
1478613278
6

Komentujte

Poznámka: Vo verziách pred 3.0.7 druhý parameter funkcie špecifikoval rozsah čísel. Napríklad, ak chcete v týchto verziách získať náhodné čísla medzi 5 a 15, musíte zadať funkciu mt_rand(5, 11).

mt_srand()

Nastaví počiatočnú hodnotu najlepšieho generátora náhodných čísel (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Popis:

Void mt_srand()

Nastaví počiatočnú hodnotu generátora náhodných čísel pomocou seedu. Od PHP 4.2.0 je seed voliteľný a predvolené nastavenia pre náhodné hodnoty sú vynechané.

Príklad použitia mt_srand()

Poznámka: Od PHP 4.2.0 už nie je potrebné inicializovať generátor náhodných čísel pomocou srand() alebo mt_srand(), pretože sa to teraz robí automaticky.

Technicky je pojem „generátor náhodných čísel“ nezmysel, keďže čísla samotné nie sú náhodné. Je napríklad 100 náhodné číslo? A čo 25? Tento výraz v skutočnosti znamená, že vytvára postupnosť čísel, ktoré sa objavujú náhodne. To vyvoláva zložitejšiu otázku: čo je to postupnosť náhodných čísel? Jediná správna odpoveď: postupnosť náhodných čísel je postupnosť, v ktorej všetky prvky nesúvisia. Táto definícia vedie k paradoxu, že akákoľvek sekvencia môže byť buď náhodná alebo nenáhodná, v závislosti od toho, ako sa sekvencia získa. Napríklad nasledujúci reťazec čísel
1 2 3 4 5 6 7 8 9 0
bola získaná napísaním horného riadku klávesnice v poradí, takže sekvenciu nemožno považovať za náhodne vygenerovanú. Ale čo keď dostanete rovnakú postupnosť, keď vyberiete očíslované tenisové loptičky z hlavne. V tomto prípade ide už o náhodne vygenerovanú sekvenciu. Tento príklad ukazuje, že náhodnosť sekvencie závisí od toho, ako bola získaná, a nie od sekvencie samotnej.

Pamätajte, že počítačom vygenerovaná postupnosť čísel je deterministická: každé číslo okrem prvého závisí od čísel pred ním. Technicky to znamená, že počítač dokáže vygenerovať len kvázi náhodnú postupnosť čísel, t.j. v skutočnosti nie sú náhodné. Pre väčšinu úloh to však stačí a pre jednoduchosť sa takéto sekvencie budú nazývať náhodné. Jednu veľmi zaujímavú metódu vyvinul John von Neumann; často sa nazýva odmocnina. Pri tejto metóde sa predchádzajúce náhodné číslo odmocní a potom sa z výsledku extrahujú stredné číslice. Napríklad, ak vytvárate čísla s tromi číslicami a predchádzajúce číslo bolo 121, potom umocnenie výsledku dáva výsledok 14641. Umocnenie prostredných troch číslic dáva ďalšie náhodné číslo 464. Nevýhodou tejto metódy je, že má veľmi krátka doba opakovania, nazývaná cyklus . Z tohto dôvodu sa dnes táto metóda nepoužíva. Moderné metódy generovania náhodných čísel sú oveľa zložitejšie.

Náhodné čísla v PHP

PHP má dve skupiny funkcií na prácu s náhodnými číslami. Čisto navonok ich možno rozlíšiť predponou mt_ pre všetky funkcie jednej zo skupín.

Zastarané funkcie
funkcia rand Vráti celé číslo medzi nulou a hodnotou RAND_MAX (čo je 32767). Môže mať dva voliteľné celočíselné parametre – ak sú zadané, od prvého parametra po druhý sa vygeneruje náhodné číslo.

Echo rand(); echo rand(1 100); // Zadajte náhodné číslo od 1 do 100

Funkčný srand. Určuje postupnosť náhodných čísel vytvorených funkciou rand. Má celý parameter - pre rôzne hodnoty tohto parametra rand vytvorí rôzne sekvencie čísel. Funkciu srand je potrebné zavolať iba raz pred všetkými volaniami funkcie rand. Príklad použitia:

Srand(1288); // Inicializácia generátora náhodných čísel for($i=0; $iquery("SELECT COUNT(*) AS count FROM úvodzoviek");
if ($row = $sth->fetchRow()) (
$pocet = $riadok;
) inak (
zomrieť ($row->getMessage());
}
$random = mt_rand(0, $počet - 1);
$sth = $dbh->query("VYBRAŤ citát FROM úvodzoviek LIMIT $náhodný,1");
while ($row = $sth->fetchRow()) (
vytlačiť $riadok .

"\n";
}

Tento útržok kódu určí celkový počet riadkov v tabuľke, vygeneruje náhodné číslo z tohto rozsahu a potom použije LIMIT $random,1 na VÝBER jedného riadku z tabuľky so začiatkom na pozícii $random. Vo verzii MySQL 3.23 alebo vyššej je možná alternatívna možnosť:

$sth = $dbh->query("VYBRAŤ citát Z úvodzoviek ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
vytlačiť $riadok . "\n";
}

V tomto prípade MySQL najprv náhodne usporiada riadky a potom vráti prvý riadok.