Php random na numero mula 1 hanggang 10. Ano ang bago sa PHP7.1: random na pagbuo ng numero. Mga Random na Numero sa JavaScript

Ilang beses na akong tinanong kung paano ako gumagawa ng mga random na panipi sa aking website sa block na "Mga Matalinong Quote." Susunod, nalaman kong ang problema dito ay sa mga taong hindi nauunawaan kung paano mag-output ng isang random na elemento mula sa isang array sa PHP. Ang gawain ay simple, ngunit gayunpaman, dahil ang mga tanong ay lumitaw, dapat silang masagot.

Ibibigay ko agad ang code. Sabihin nating mayroong array na may set ng mga quote. At kailangan mong pumili ng isang random na isa sa mga ito at output:

Ang pangunahing punto ay ang pagkuha ng isang random na numero. Ang kailangan mo lang gawin ay magtakda ng tamang mga hangganan. Kung kailangan mong pumili ng isang random na elemento sa buong haba ng array, pagkatapos ito ay mula 0 hanggang (haba ng array minus 1). At pagkatapos ay hilahin lamang ang isang elemento mula sa array na may resultang random na index.

Tulad ng para sa gawain na may mga quote, mas mahusay na iimbak ang mga ito sa isang database. Sa prinsipyo, kung ang site ay napaka-simple, maaari itong gawin sa isang text file. Ngunit kung sa isang database, pagkatapos ay mas mahusay na gumamit ng RAND() at LIMIT sa SQL query upang agad kang makakuha ng isang solong at random na quote mula sa database.

Upang makabuo ng random na numero, maaari mong gamitin ang PHP rand() o mt_rand() function. Ang pangangailangan na gumamit ng mga random na numero ay madalas na lumitaw sa pagsasanay para sa pagbibigay ng pangalan sa mga variable, file, paglikha ng pangunahing impormasyon, at pagtiyak ng seguridad.

Random at uniqueness

Ang PHP random function ay may dalawang variant: rand() at mt_rand(). Ito ay pinaniniwalaan na ang algorithm sa unang kaso ay mas simple at bumubuo ng mga pseudorandom na numero. Ang pangalawang opsyon ay may mas mabilis na algorithm at kilalang mga katangian ng matematika. Sa karamihan ng mga kaso kapag kailangan mong makakuha ng random na numero, maaari kang gumamit ng serye ng PHP random na tawag at makakuha ng natatanging kumbinasyon ng mga numero.

Kung kukuha ka ng mga numero mula 1 hanggang 26 o mula 1 hanggang 32 bilang batayan at kunin ang mga ito nang random, maaari kang bumuo ng pangunahing impormasyon bilang isang pagkakasunud-sunod ng mga Latin o Cyrillic na titik. Sa kasong ito, ang PHP random ay isang paraan ng pagbuo ng pagkakasunod-sunod ng alpabetikong impormasyon, halimbawa para sa mga layunin ng pagsubok sa mga channel ng komunikasyon o algorithm.

Ang isang random na numero ay bihirang natatangi dahil maaari itong lumitaw nang maraming beses ayon sa batas ng pamamahagi ng isang random na variable. Ngunit kung pagsasamahin mo, sa partikular, ang static na variable na PHP & Math.random ng wikang JavaScript, makakakuha ka ng tunay na natatanging random na numero na hindi na mauulit sa paglipas ng panahon.

Gamit ang Time Function

Ang function ng oras, parehong PHP at JavaScript, ay nagbibigay-daan sa iyo na bumuo ng mga natatanging kumbinasyon ng mga numero, bihira kapag ang isang sapat na malaking bilang ng mga kaganapan ay maaaring mangyari sa isang punto sa oras at ang random na variable ay mauulit.

Sa pamamagitan ng paglalapat ng PHP na random sa hanay ng mga segundo o millisecond sa isang malaking hanay ng mga posibleng halaga, posibleng makakuha ng mga natatanging random na kumbinasyon ng mga numero o titik. Ano pa?

Sa pamamagitan ng pagsasama-sama ng halaga ng function ng oras, isang sunud-sunod na lumalaking numero at PHP random, maaari mong matiyak ang maaasahang seguridad ng mga channel ng komunikasyon ng kliyente at server, lumikha ng mga natatanging code para sa mga variable, at makabuo ng mga hindi inaasahang kaganapan sa mga algorithm.

Ang isang PHP random number generator ay isang mahusay na solusyon para sa karamihan ng mga gawain, lalo na kapag kailangan mong mabilis na makakuha ng mataas na kalidad na mga resulta na may kaunting pagsisikap. Ang paggamit ng rand() at mt_rand function na kasabay ng sunud-sunod na paglaki ng mga serye ng mga numero o mga halaga ng oras ay nagbibigay-daan sa iyo upang makakuha ng mga random na numero, parehong umuulit sa mga halaga at natatangi.

Sinisimulan ang random number generator. Syntax:

Void srand(int seed)

Sinisimulan ang random number generator na may seed value.

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

GETRADMAX

Ibinabalik ang pinakamalaking posibleng random na numero. Syntax:

Int getrandmax()

Ibinabalik ng function na ito ang maximum na value na maaaring makuha gamit ang rand() random number generation function.

Kadalasan ito ay 32767

Bumubuo ng random na numero. Syntax:

Int rand()

Kapag tinawag gamit ang opsyonal na min at max na mga parameter, ang function na ito ay bumubuo ng random na numero hanggang sa at kasama ang mga parameter na iyon. Kung nawawala ang min at max na mga parameter, ibabalik ang isang numero mula 0 hanggang RAND_MAX.

Para gumana ng tama ang function na ito, bago ito gamitin, kailangan mong simulan ang random number generator gamit ang srand() function.

lcg_value()

LCG pseudo-random number generator (PHP 4, PHP 5)

Paglalarawan:

Float lcg_value (walang bisa)

Ang lcg_value() ay nagbabalik ng pseudorandom na numero sa hanay (0, 1). Pinagsasama ng function ang dalawang generator na may 2^31 - 85 at 2^31 - 249 sa isang panahon.

mt_getrandmax()

Ipinapakita ang pinakamalaking posibleng random na halaga (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Paglalarawan:

Int mt_getrandmax (walang bisa)

Ipinapakita ang maximum na halaga na maaaring ibalik ng mt_rand()

mt_rand()

Bumubuo ng pinakamahusay na random na halaga (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Paglalarawan:

int mt_rand()

Maraming mga mas lumang bersyon ng random number generators ay may mga kaduda-dudang katangian at mabagal. Bilang default, ginagamit ng PHP ang rand() function upang makabuo ng mga random na numero. Ang mt_rand() function ay isang magandang kapalit. Gumagamit ito ng random number generator na 4 na beses na mas mabilis kaysa rand() at gumagamit ng Mersenne Twister.

Tinatawag na walang opsyonal na min at max na mga argumento, ang mt_rand() ay nagbabalik ng pseudo-random na halaga na nasa pagitan ng 0 at RAND_MAX. Kung kailangan mong makakuha, halimbawa, mga random na halaga sa pagitan ng 5 at 15 kasama, hanapin ang mt_rand (5, 15).

Halimbawa ng paggamit ng mt_rand()

Ang resulta ng pagpapatakbo ng halimbawang ito ay magiging ganito:

1604716014
1478613278
6

Magkomento

Tandaan: Sa mga bersyon bago ang 3.0.7, tinukoy ng pangalawang parameter ng function ang hanay ng mga numero. Halimbawa, upang makakuha ng mga random na numero sa pagitan ng 5 at 15 sa mga bersyong ito kailangan mong tukuyin ang function na mt_rand(5, 11).

mt_srand()

Itinatakda ang paunang halaga ng pinakamahusay na generator ng random na numero (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Paglalarawan:

Walang bisa mt_srand()

Itinatakda ang paunang halaga ng random number generator gamit ang seed. Sa PHP 4.2.0, ang seed ay opsyonal at ang mga default na setting para sa mga random na halaga ay tinanggal.

Halimbawa ng paggamit ng mt_srand()

Tandaan: Simula sa PHP 4.2.0, hindi na kailangang simulan ang random number generator na may srand() o mt_srand(), dahil awtomatiko na itong ginagawa.

Sa teknikal, ang terminong "random number generator" ay walang kapararakan, dahil ang mga numero mismo ay hindi random. Halimbawa, ang 100 ba ay isang random na numero? Paano kung 25? Ang aktwal na ibig sabihin ng terminong ito ay lumilikha ito ng pagkakasunod-sunod ng mga numero na random na lumilitaw. Nagtataas ito ng mas mahirap na tanong: ano ang pagkakasunod-sunod ng mga random na numero? Ang tanging tamang sagot: ang pagkakasunod-sunod ng mga random na numero ay isang pagkakasunud-sunod kung saan ang lahat ng mga elemento ay walang kaugnayan. Ang kahulugan na ito ay humahantong sa kabalintunaan na ang anumang pagkakasunud-sunod ay maaaring random o hindi random, depende sa kung paano nakuha ang pagkakasunud-sunod. Halimbawa, ang sumusunod na string ng mga numero
1 2 3 4 5 6 7 8 9 0
ay nakuha sa pamamagitan ng pag-type sa tuktok na linya ng keyboard sa pagkakasunud-sunod, kaya ang sequence ay hindi maaaring ituring na random na nabuo. Ngunit paano kung makakuha ka ng parehong pagkakasunud-sunod kapag kinuha mo ang may bilang na mga bola ng tennis mula sa bariles. Sa kasong ito, isa na itong random na nabuong sequence. Ipinapakita ng halimbawang ito na ang randomness ng isang sequence ay depende sa kung paano ito nakuha, at hindi sa sequence mismo.

Tandaan na ang pagkakasunud-sunod ng mga numero na binuo ng computer ay deterministiko: ang bawat numero maliban sa una ay nakadepende sa mga numero bago nito. Sa teknikal, nangangahulugan ito na isang quasi-random na pagkakasunud-sunod ng mga numero lamang ang maaaring mabuo ng isang computer, i.e. sa katunayan sila ay hindi tunay na random. Gayunpaman, ito ay sapat na para sa karamihan ng mga gawain at para sa pagiging simple ang mga naturang pagkakasunud-sunod ay tatawaging random. Isang napaka-kagiliw-giliw na paraan ay binuo ni John von Neumann; madalas itong tinatawag na root mean square. Sa pamamaraang ito, ang nakaraang random na numero ay naka-squad, at pagkatapos ay ang mga gitnang digit ay nakuha mula sa resulta. Halimbawa, kung lumilikha ka ng mga numero na may tatlong digit, at ang dating numero ay 121, pagkatapos ay ang pag-square nito ay nagbibigay ng resulta na 14641. Ang paghihiwalay sa gitnang tatlong digit ay nagbibigay ng susunod na random na numero na 464. Ang kawalan ng pamamaraang ito ay mayroon itong napaka maikling panahon ng pag-uulit, na tinatawag na cycle . Para sa kadahilanang ito, ang pamamaraang ito ay hindi ginagamit ngayon. Ang mga modernong paraan ng pagbuo ng mga random na numero ay mas kumplikado.

Mga random na numero sa PHP

Ang PHP ay may dalawang pangkat ng mga function para sa pagtatrabaho sa mga random na numero. Puro panlabas, maaari silang makilala sa pamamagitan ng mt_ prefix para sa lahat ng mga function ng isa sa mga grupo.

Mga hindi na ginagamit na feature
rand function Nagbabalik ng integer sa pagitan ng zero at ang halaga ng RAND_MAX (na 32767). Maaaring magkaroon ng dalawang opsyonal na parameter ng integer - kung tinukoy ang mga ito, bubuo ng random na numero mula sa unang parameter hanggang sa pangalawa.

Echo rand(); echo rand(1,100); // Magbigay ng random na numero mula 1 hanggang 100

Function srand. Tinutukoy ang pagkakasunud-sunod ng mga random na numero na ginawa ng rand function. Mayroon itong isang buong parameter - para sa iba't ibang mga halaga ng parameter na ito, ang rand ay gagawa ng iba't ibang mga pagkakasunud-sunod ng mga numero. Ang srand function ay kailangan lamang na tawagan nang isang beses bago ang lahat ng mga tawag sa rand function. Halimbawa ng paggamit:

Srand(1288); // Initialize ang random number generator for($i=0; $query("SELECT COUNT(*) AS count FROM quotes");
kung ($row = $sth->fetchRow()) (
$count = $row;
) iba pa (
mamatay ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("PUMILI NG quote MULA SA quotes LIMIT $random,1");
habang ($row = $sth->fetchRow()) (
i-print ang $row .

"\n";
}

Tinutukoy ng snippet ng code na ito ang kabuuang bilang ng mga row sa talahanayan, bumubuo ng random na numero mula sa hanay na iyon, at pagkatapos ay gumagamit ng LIMIT $random,1 upang PUMILI ng isang row mula sa talahanayan simula sa posisyong $random. Sa MySQL bersyon 3.23 o mas mataas, posible ang isang alternatibong opsyon:

$sth = $dbh->query("PUMILI NG quote MULA SA quotes ORDER BY RAND() LIMIT 1");
habang ($row = $sth->fetchRow()) (
i-print ang $row . "\n";
}

Sa kasong ito, ang MySQL ay unang nag-randomize sa mga hilera at pagkatapos ay ibabalik ang unang hilera.