Numër i rastësishëm Php nga 1 në 10. Çfarë ka të re në PHP7.1: gjenerimi i numrave të rastësishëm. Numra të rastësishëm në JavaScript

Unë jam pyetur tashmë disa herë se si bëj citate të rastësishme në faqen time të internetit në bllokun "Citimet inteligjente". Më pas, arrita të zbuloj se problemi këtu është me njerëzit që nuk kuptojnë se si të nxjerrin një element të rastësishëm nga një grup në PHP. Detyra është e thjeshtë, por megjithatë, meqenëse lindin pyetje, ato duhet të përgjigjen.

Unë do t'ju jap kodin menjëherë. Le të themi se ekziston një grup me një grup thonjëzash. Dhe ju duhet të zgjidhni një të rastësishme prej tyre dhe të nxirrni:

Pika kryesore është marrja e një numri të rastësishëm. Gjithçka që duhet të bëni është të vendosni kufijtë e duhur. Nëse ju duhet të zgjidhni një element të rastësishëm në të gjithë gjatësinë e grupit, atëherë ai është nga 0 në (gjatësia e grupit minus 1). Dhe pastaj thjesht tërhiqni një element nga grupi me indeksin e rastësishëm që rezulton.

Sa i përket detyrës me thonjëza, është më mirë t'i ruani ato në një bazë të dhënash. Në parim, nëse faqja është shumë e thjeshtë, atëherë mund të bëhet në një skedar teksti. Por nëse në një bazë të dhënash, atëherë është më mirë të përdorni RAND() dhe LIMIT në pyetjen SQL në mënyrë që të merrni menjëherë një citat të vetëm dhe të rastësishëm nga baza e të dhënave.

Për të gjeneruar një numër të rastësishëm, mund të përdorni funksionin PHP rand() ose mt_rand(). Kërkesa për të përdorur numra të rastësishëm shpesh lind në praktikë për emërtimin e variablave, skedarëve, krijimin e informacionit kyç dhe garantimin e sigurisë.

Rastësi dhe unike

Funksioni i rastësishëm PHP vjen në dy variante: rand() dhe mt_rand(). Besohet se algoritmi në rastin e parë është më i thjeshtë dhe gjeneron numra pseudorandom. Opsioni i dytë ka një algoritëm më të shpejtë dhe karakteristika të njohura matematikore. Në shumicën e rasteve kur duhet të merrni një numër të rastësishëm, mund të përdorni një seri thirrjesh të rastësishme PHP dhe të merrni një kombinim unik numrash.

Nëse merrni si bazë numrat nga 1 në 26 ose nga 1 në 32 dhe i merrni ato në mënyrë të rastësishme, mund të formoni informacionin kryesor si një sekuencë shkronjash latine ose cirilike. Në këtë rast, PHP random është një mënyrë për të gjeneruar një sekuencë informacioni alfabetik, për shembull për qëllime të testimit të kanaleve ose algoritmeve të komunikimit.

Një numër i rastësishëm është rrallë unik sepse mund të shfaqet disa herë sipas ligjit të shpërndarjes së një ndryshoreje të rastësishme. Por nëse kombinoni, në veçanti, variablin statik PHP & Math.random të gjuhës JavaScript, mund të merrni një numër të vërtetë unik të rastësishëm që nuk do të përsëritet me kalimin e kohës.

Përdorimi i funksionit të kohës

Funksioni i kohës, si PHP ashtu edhe JavaScript, ju lejon të krijoni kombinime unike numrash, rrallë kur një numër mjaft i madh ngjarjesh mund të ndodhin në një moment në kohë dhe ndryshorja e rastësishme do të përsëritet.

Duke aplikuar PHP random në intervalin e sekondave ose milisekondave në një gamë të madhe vlerash të mundshme, është e mundur të përftohen kombinime unike të rastësishme të numrave ose shkronjave. Çfarë tjetër?

Duke kombinuar vlerën e funksionit të kohës, një numër në rritje vijuese dhe PHP të rastësishme, ju mund të siguroni siguri të besueshme të kanaleve të komunikimit të klientit dhe serverit, të krijoni kode unike për variabla dhe të gjeneroni ngjarje të paparashikueshme në algoritme.

Një gjenerues i numrave të rastësishëm PHP është një zgjidhje e shkëlqyer për shumicën e detyrave, veçanërisht kur ju duhet të merrni shpejt rezultate me cilësi të lartë me përpjekje minimale. Përdorimi i funksioneve rand() dhe mt_rand në lidhje me seritë në rritje të vazhdueshme të numrave ose vlerave kohore ju lejon të merrni numra të rastësishëm, të përsëritur në vlera dhe unike.

Inicializon gjeneratorin e numrave të rastësishëm. Sintaksë:

Void srand (int seed)

Inicializon gjeneratorin e numrave të rastësishëm me vlerën e farës.

Srand((double) mikrokohë()*1000000);
$random = rand();
jehonë $ e rastësishme;

GETRANDMAX

Rikthen numrin më të madh të mundshëm të rastësishëm. Sintaksë:

Int getrandmax()

Ky funksion kthen vlerën maksimale që mund të merret duke përdorur funksionin e gjenerimit të numrave të rastësishëm rand().

Zakonisht është 32767

Gjeneron një numër të rastësishëm. Sintaksë:

Int rand ()

Kur thirret me parametrat opsionalë min dhe max, ky funksion gjeneron një numër të rastësishëm deri në dhe duke përfshirë ato parametra. Nëse mungojnë parametrat min dhe max, kthehet një numër që varion nga 0 në RAND_MAX.

Që ky funksion të funksionojë siç duhet, përpara se ta përdorni, duhet të inicializoni gjeneratorin e numrave të rastësishëm me funksionin srand().

lcg_value()

Gjeneruesi i numrave pseudo të rastësishëm LCG (PHP 4, PHP 5)

Përshkrim:

Float lcg_value (i pavlefshëm)

lcg_value() kthen një numër pseudorandom në rangun (0, 1). Funksioni kombinon dy gjeneratorë me 2^31 - 85 dhe 2^31 - 249 në një periudhë.

mt_getrandmax()

Tregon vlerën më të madhe të mundshme të rastësishme (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Përshkrim:

Int mt_getrandmax (i pavlefshëm)

Tregon vlerën maksimale që mund të kthehet nga mt_rand()

mt_rand()

Gjeneron vlerën më të mirë të rastësishme (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Përshkrim:

int mt_rand()

Shumë versione të vjetra të gjeneratorëve të numrave të rastësishëm kanë karakteristika të dyshimta dhe janë të ngadalta. Si parazgjedhje, PHP përdor funksionin rand() për të gjeneruar numra të rastit. Funksioni mt_rand() është një zëvendësim i mirë. Ai përdor një gjenerator numrash të rastësishëm që është 4 herë më i shpejtë se rand() dhe përdor Mersenne Twister.

I thirrur pa argumentet opsionale min dhe max, mt_rand() kthen një vlerë pseudo të rastësishme që varion midis 0 dhe RAND_MAX. Nëse keni nevojë të merrni, për shembull, vlera të rastësishme midis 5 dhe 15 përfshirëse, kërkoni mt_rand (5, 15).

Shembull i përdorimit të mt_rand()

Rezultati i ekzekutimit të këtij shembulli do të jetë diçka e tillë:

1604716014
1478613278
6

Komentoni

Shënim: Në versionet para 3.0.7, parametri i dytë i funksionit specifikonte gamën e numrave. Për shembull, për të marrë numra të rastësishëm ndërmjet 5 dhe 15 në këto versione, duhet të specifikoni funksionin mt_rand(5, 11).

mt_srand()

Vendos vlerën fillestare të gjeneratorit më të mirë të numrave të rastësishëm (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Përshkrim:

I pavlefshëm mt_srand()

Vendos vlerën fillestare të gjeneratorit të numrave të rastësishëm duke përdorur seed. Që nga PHP 4.2.0, seed është opsionale dhe cilësimet e paracaktuara për vlerat e rastësishme janë hequr.

Shembull i përdorimit të mt_srand()

Shënim: Që nga PHP 4.2.0, nuk është më e nevojshme të inicializohet gjeneratori i numrave të rastësishëm me srand() ose mt_srand(), pasi kjo tani bëhet automatikisht.

Teknikisht, termi "gjenerues i numrave të rastësishëm" është i pakuptimtë, pasi vetë numrat nuk janë të rastësishëm. Për shembull, a është 100 një numër i rastësishëm? Po 25? Ajo që në të vërtetë do të thotë ky term është se krijon një sekuencë numrash që shfaqen rastësisht. Kjo ngre një pyetje më të vështirë: çfarë është një sekuencë numrash të rastit? Përgjigja e vetme e saktë: një sekuencë numrash të rastësishëm është një sekuencë në të cilën të gjithë elementët janë të palidhur. Ky përkufizim çon në paradoksin se çdo sekuencë mund të jetë ose e rastësishme ose jo e rastësishme, në varësi të mënyrës se si është marrë sekuenca. Për shembull, vargu i mëposhtëm i numrave
1 2 3 4 5 6 7 8 9 0
është marrë duke shtypur rreshtin e sipërm të tastierës me radhë, kështu që sekuenca nuk mund të konsiderohet e krijuar rastësisht. Por çka nëse merrni të njëjtën sekuencë kur nxirrni topat e tenisit me numër nga fuçi. Në këtë rast, tashmë është një sekuencë e krijuar rastësisht. Ky shembull tregon se rastësia e një sekuence varet nga mënyra se si është marrë, dhe jo nga vetë sekuenca.

Mos harroni se një sekuencë numrash e gjeneruar nga kompjuteri është përcaktuese: çdo numër përveç të parit varet nga numrat përpara tij. Teknikisht, kjo do të thotë se vetëm një sekuencë thuajse e rastësishme numrash mund të gjenerohet nga një kompjuter, d.m.th. në fakt ato nuk janë vërtet të rastësishme. Megjithatë, kjo është e mjaftueshme për shumicën e detyrave dhe për thjeshtësi sekuenca të tilla do të quhen të rastësishme. Një metodë shumë interesante u zhvillua nga John von Neumann; shpesh quhet rrënja e mesme katrore. Në këtë metodë, numri i mëparshëm i rastësishëm është në katror, ​​dhe më pas shifrat e mesme nxirren nga rezultati. Për shembull, nëse jeni duke krijuar numra me tre shifra, dhe numri i mëparshëm ishte 121, atëherë kuadrimi i tij jep rezultatin 14641. Izolimi i tre shifrave të mesme jep numrin tjetër të rastësishëm 464. Disavantazhi i kësaj metode është se ajo ka një periudha e shkurtër e përsëritjes, e quajtur një cikël. Për këtë arsye, kjo metodë nuk përdoret sot. Metodat moderne të gjenerimit të numrave të rastit janë shumë më komplekse.

Numra të rastësishëm në PHP

PHP ka dy grupe funksionesh për të punuar me numra të rastit. Thjesht nga jashtë, ato mund të dallohen nga prefiksi mt_ për të gjitha funksionet e njërit prej grupeve.

Karakteristika të vjetruara
funksioni rand Kthen një numër të plotë ndërmjet zeros dhe vlerës së RAND_MAX (që është 32767). Mund të ketë dy parametra opsional të numrave të plotë - nëse ato janë të specifikuara, gjenerohet një numër i rastësishëm nga parametri i parë në të dytin.

Echo rand(); echo rand (1,100); // Jepni një numër të rastësishëm nga 1 në 100

Funksioni srand. Përcakton sekuencën e numrave të rastit të prodhuar nga funksioni rand. Ai ka një parametër të tërë - për vlera të ndryshme të këtij parametri, rand do të prodhojë sekuenca të ndryshme numrash. Funksioni srand duhet të thirret vetëm një herë përpara të gjitha thirrjeve në funksionin rand. Shembull përdorimi:

Srand (1288); // Inicializoni gjeneratorin e numrave të rastësishëm për($i=0; $iquery("SELECT COUNT(*) AS count FROM quotes");
nëse ($row = $sth->fetchRow()) (
$count = $rresht;
) tjeter (
die ($row->getMessage());
}
$rast = mt_rand(0, $count - 1);
$sth = $dbh->pyetës("SELECT quote FROM quotes LIMIT $random,1");
ndërsa ($row = $sth->fetchRow()) (
printoni rreshtin $.

"\n";
}

Ky copë kodi përcakton numrin total të rreshtave në tabelë, gjeneron një numër të rastësishëm nga ai diapazon, dhe më pas përdor LIMIT $random,1 për të ZGJEDHUR një rresht nga tabela duke filluar nga pozicioni $i rastësishëm. Në versionin MySQL 3.23 ose më të lartë, një opsion alternativ është i mundur:

$sth = $dbh->pyetës("ZGJIDH quote FROM quotes ORDER BY RAND() LIMIT 1");
ndërsa ($row = $sth->fetchRow()) (
printoni rreshtin $. "\n";
}

Në këtë rast, MySQL fillimisht randomizon rreshtat dhe më pas kthen rreshtin e parë.