Număr aleator PHP de la 1 la 10. Ce este nou în PHP7.1: generarea numerelor aleatoare. Numere aleatorii în JavaScript

Am fost deja întrebat de câteva ori cum fac citate aleatorii pe site-ul meu în blocul „Citate inteligente”. Apoi, am reușit să aflu că problema aici este că oamenii nu înțeleg cum să scoată un element aleatoriu dintr-o matrice în PHP. Sarcina este simplă, dar totuși, deoarece apar întrebări, acestea trebuie să primească răspuns.

Îți dau codul imediat. Să presupunem că există o matrice cu un set de ghilimele. Și trebuie să selectați unul aleatoriu dintre ele și să scoateți:

Punctul cheie este obținerea unui număr aleatoriu. Tot ce trebuie să faci este să stabilești limitele potrivite. Dacă trebuie să selectați un element aleatoriu pe toată lungimea matricei, atunci acesta este de la 0 la (lungimea matricei minus 1). Și apoi pur și simplu scoateți un element din matrice cu indexul aleator rezultat.

În ceea ce privește sarcina cu ghilimele, este mai bine să le stocați într-o bază de date. În principiu, dacă site-ul este foarte simplu, atunci se poate face într-un fișier text. Dar dacă într-o bază de date, atunci este mai bine să utilizați RAND() și LIMIT în interogarea SQL, astfel încât să obțineți imediat un citat unic și aleatoriu din baza de date.

Pentru a genera un număr aleator, puteți utiliza funcția PHP rand() sau mt_rand(). Cerința de a folosi numere aleatoare apare adesea în practică pentru denumirea variabilelor, fișierele, crearea informațiilor cheie și asigurarea securității.

Aleatorie și unicitate

Funcția aleatorie PHP vine în două variante: rand() și mt_rand(). Se crede că algoritmul în primul caz este mai simplu și generează numere pseudoaleatoare. A doua opțiune are un algoritm mai rapid și caracteristici matematice binecunoscute. În cele mai multe cazuri, când trebuie să obțineți un număr aleator, puteți utiliza o serie de apeluri aleatoare PHP și puteți obține o combinație unică de numere.

Dacă luați ca bază numere de la 1 la 26 sau de la 1 la 32 și le obțineți aleatoriu, puteți forma informații cheie ca o succesiune de litere latine sau chirilice. În acest caz, PHP random este o modalitate de a genera o secvență de informații alfabetice, de exemplu în scopul testării canalelor de comunicare sau a algoritmilor.

Un număr aleator este rareori unic, deoarece poate apărea de mai multe ori conform legii de distribuție a unei variabile aleatoare. Dar dacă combinați, în special, variabila statică PHP & Math.random a limbajului JavaScript, puteți obține un număr real unic aleatoriu care nu se va repeta în timp.

Utilizarea funcției de timp

Funcția de timp, atât PHP, cât și JavaScript, vă permite să formați combinații unice de numere, rareori când un număr suficient de mare de evenimente poate avea loc la un moment dat și variabila aleatoare se va repeta.

Prin aplicarea aleatorie PHP în intervalul de secunde sau milisecunde pe o gamă largă de valori posibile, este posibil să se obțină combinații aleatorii unice de numere sau litere. Ce altceva?

Combinând valoarea funcției de timp, un număr în creștere secvențial și aleatoriu PHP, puteți asigura securitatea de încredere a canalelor de comunicare client și server, puteți crea coduri unice pentru variabile și puteți genera evenimente imprevizibile în algoritmi.

Un generator de numere aleatoare PHP este o soluție excelentă pentru majoritatea sarcinilor, mai ales atunci când trebuie să obțineți rapid rezultate de înaltă calitate cu efort minim. Utilizarea funcțiilor rand() și mt_rand împreună cu serii de numere sau valori de timp în creștere secvențială vă permite să obțineți numere aleatorii, atât repetate în valori, cât și unice.

Inițializează generatorul de numere aleatoare. Sintaxă:

Void srand(int seed)

Inițializează generatorul de numere aleatoare cu valoarea inițială.

Srand((dublu) microtime()*1000000);
$aleatoriu = rand();
echo $aleatoriu;

GETRANDMAX

Returnează cel mai mare număr aleatoriu posibil. Sintaxă:

Int getrandmax()

Această funcție returnează valoarea maximă care poate fi obținută folosind funcția de generare a numerelor aleatoare rand().

De obicei este 32767

Generează un număr aleatoriu. Sintaxă:

Int rand()

Când este apelată cu parametrii opționali min și max, această funcție generează un număr aleatoriu până la și inclusiv acei parametri. Dacă lipsesc parametrii min și max, este returnat un număr cuprins între 0 și RAND_MAX.

Pentru ca această funcție să funcționeze corect, înainte de a o utiliza, trebuie să inițializați generatorul de numere aleatoare cu funcția srand().

lcg_value()

Generator de numere pseudoaleatoare LCG (PHP 4, PHP 5)

Descriere:

Float lcg_value (void)

lcg_value() returnează un număr pseudoaleator în intervalul (0, 1). Funcția combină două generatoare cu 2^31 - 85 și 2^31 - 249 într-o perioadă.

mt_getrandmax()

Afișează cea mai mare valoare aleatorie posibilă (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Descriere:

Int mt_getrandmax (void)

Afișează valoarea maximă care poate fi returnată de mt_rand()

mt_rand()

Generează cea mai bună valoare aleatorie (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Descriere:

int mt_rand()

Multe versiuni mai vechi ale generatoarelor de numere aleatorii au caracteristici discutabile și sunt lente. În mod implicit, PHP folosește funcția rand() pentru a genera numere aleatorii. Funcția mt_rand() este un înlocuitor bun. Folosește un generator de numere aleatoare care este de 4 ori mai rapid decât rand() și folosește Mersenne Twister.

Apelat fără argumentele opționale min și max, mt_rand() returnează o valoare pseudo-aleatorie cuprinsă între 0 și RAND_MAX. Dacă trebuie să obțineți, de exemplu, valori aleatorii între 5 și 15 inclusiv, căutați mt_rand (5, 15).

Exemplu de utilizare a mt_rand()

Rezultatul rulării acestui exemplu va fi cam așa:

1604716014
1478613278
6

cometariu

Notă: În versiunile anterioare 3.0.7, al doilea parametru al funcției specifica intervalul de numere. De exemplu, pentru a obține numere aleatoare între 5 și 15 în aceste versiuni trebuie să specificați funcția mt_rand(5, 11).

mt_srand()

Setează valoarea inițială a celui mai bun generator de numere aleatoare (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Descriere:

Void mt_srand()

Setează valoarea inițială a generatorului de numere aleatoare folosind semințe. Începând cu PHP 4.2.0, seed este opțional și setările implicite pentru valori aleatorii sunt omise.

Exemplu de utilizare a mt_srand()

Notă: Din PHP 4.2.0, nu mai este necesară inițializarea generatorului de numere aleatoare cu srand() sau mt_srand(), deoarece acest lucru se face acum automat.

Din punct de vedere tehnic, termenul „generator de numere aleatoare” este un nonsens, deoarece numerele în sine nu sunt aleatorii. De exemplu, 100 este un număr aleatoriu? Ce zici de 25? Ceea ce înseamnă de fapt acest termen este că creează o secvență de numere care apar aleatoriu. Acest lucru ridică o întrebare mai dificilă: ce este o succesiune de numere aleatoare? Singurul răspuns corect: o succesiune de numere aleatoare este o succesiune în care toate elementele nu au legătură. Această definiție duce la paradoxul că orice secvență poate fi fie aleatorie, fie non-aleatorie, în funcție de modul în care este obținută secvența. De exemplu, următorul șir de numere
1 2 3 4 5 6 7 8 9 0
a fost obținut prin tastarea liniei de sus a tastaturii în ordine, astfel încât secvența nu poate fi considerată generată aleatoriu. Dar ce se întâmplă dacă obții aceeași secvență când scoți mingile de tenis numerotate din butoi. În acest caz, este deja o secvență generată aleatoriu. Acest exemplu arată că aleatoritatea unei secvențe depinde de modul în care a fost obținută și nu de secvența în sine.

Amintiți-vă că o secvență de numere generată de computer este deterministă: fiecare număr, cu excepția primului, depinde de numerele dinainte. Din punct de vedere tehnic, aceasta înseamnă că doar o secvență cvasialeatorie de numere poate fi generată de un computer, adică. de fapt ele nu sunt cu adevărat aleatorii. Cu toate acestea, acest lucru este suficient pentru majoritatea sarcinilor și, pentru simplitate, astfel de secvențe vor fi numite aleatoare. O metodă foarte interesantă a fost dezvoltată de John von Neumann; este adesea numit rădăcină pătrată medie. În această metodă, numărul aleatoriu anterior este pătrat, iar apoi cifrele din mijloc sunt extrase din rezultat. De exemplu, dacă creați numere cu trei cifre, iar numărul anterior a fost 121, atunci la pătrarea rezultatului rezultă 14641. La pătratul celor trei cifre din mijloc dă următorul număr aleatoriu 464. Dezavantajul acestei metode este că are un perioadă de repetare foarte scurtă, numită ciclu. Din acest motiv, această metodă nu este folosită astăzi. Metodele moderne de generare a numerelor aleatoare sunt mult mai complexe.

Numere aleatorii în PHP

PHP are două grupuri de funcții pentru lucrul cu numere aleatorii. Pur extern, ele pot fi distinse prin prefixul mt_ pentru toate funcțiile unuia dintre grupuri.

Caracteristici depreciate
funcția rand Returnează un număr întreg între zero și valoarea lui RAND_MAX (care este 32767). Poate avea doi parametri întregi opționali - dacă sunt specificați, se generează un număr aleator de la primul parametru la al doilea.

Echo rand(); echo rand(1.100); // Dați un număr aleatoriu de la 1 la 100

Funcția srand. Specifică succesiunea de numere aleatoare produse de funcția rand. Are un parametru întreg - pentru diferite valori ale acestui parametru, rand va produce diferite secvențe de numere. Funcția srand trebuie apelată o singură dată înainte de toate apelurile la funcția rand. Exemplu de utilizare:

Srand(1288); // Inițializați generatorul de numere aleatoare pentru($i=0; $iquery("SELECT COUNT(*) AS count FROM ghilimele");
dacă ($rând = $sth->fetchRow()) (
$număr = $rând;
) altfel (
die ($row->getMessage());
}
$aleatoriu = mt_rand(0, $număr - 1);
$sth = $dbh->query("SELECTARE citat DIN ghilimele LIMIT $random,1");
în timp ce ($rând = $sth->fetchRow()) (
print $row .

„\n”;
}

Acest fragment de cod determină numărul total de rânduri din tabel, generează un număr aleator din acel interval și apoi folosește LIMIT $random,1 pentru a SELECTA un rând din tabel începând cu poziția $random. În versiunea MySQL 3.23 sau mai recentă, este posibilă o opțiune alternativă:

$sth = $dbh->query("SELECTARE citat din ghilimele ORDER BY RAND() LIMIT 1");
în timp ce ($rând = $sth->fetchRow()) (
print $row . „\n”;
}

În acest caz, MySQL mai întâi randomizează rândurile și apoi returnează primul rând.