Računala Windows Internet

Upotreba slučajne funkcije PHP. Slučajni odabir iz niza u php php slučajni cijeli broj

Možete koristiti PHP -ovu funkciju rand () ili mt_rand () za generiranje slučajnog broja. Zahtjev za korištenje slučajnih brojeva često se javlja u praksi za imenovanje varijabli, datoteka, stvaranje ključnih informacija i osiguravanje sigurnosti.

Slučajnost i jedinstvenost

Slučajna funkcija PHP -a dolazi u dva okusa: rand () i mt_rand (). Vjeruje se da je algoritam u prvom slučaju jednostavniji i generira pseudo-slučajne brojeve. Druga mogućnost ima brži algoritam i dobro poznate matematičke karakteristike. U većini slučajeva, kada trebate dobiti slučajan broj, možete koristiti niz PHP nasumičnih poziva i dobiti jedinstvenu kombinaciju brojeva.

Uzmemo li za osnovu brojeve od 1 do 26 ili od 1 do 32 i nasumično ih dobijemo, tada možemo generirati ključne informacije kao niz latiničnih ili ćiriličnih slova. U ovom slučaju, PHP random je način generiranja niza abecednih informacija, na primjer, za testiranje komunikacijskih kanala ili algoritama.

Slučajni broj rijetko je jedinstven jer se može pojaviti više puta prema distribuciji slučajne varijable. No, ako posebno kombinirate statičku varijablu PHP & Math.random jezika JavaScript, tada možete dobiti pravi jedinstveni slučajni broj koji se neće ponavljati s vremenom.

Korištenje funkcije vremena

Funkcija vremena, i PHP i JavaScript, omogućuje vam da formirate jedinstvene kombinacije brojeva, rijetko kada se u jednom trenutku može dogoditi dovoljno veliki broj događaja, a slučajna varijabla će se ponoviti.

Primjenom slučajnog PHP -a u rasponu sekundi ili milisekundi u širokom rasponu mogućih vrijednosti možete dobiti jedinstvene slučajne kombinacije brojeva ili slova. Što drugo?

Kombinirajući vrijednost vremenske funkcije, uzastopno rastućeg broja i slučajnog PHP -a, ili možete osigurati pouzdanu sigurnost komunikacijskih kanala klijenta i poslužitelja, stvoriti jedinstvene kodove za varijable i generirati nepredvidive događaje u algoritmima.

PHP generator slučajnih brojeva izvrsno je rješenje za većinu zadataka, osobito kada trebate brzo dobiti visokokvalitetne rezultate uz minimalne troškove. Korištenje funkcija rand () i mt_rand zajedno s uzastopno rastućim nizovima brojeva ili vremenskim vrijednostima omogućuje vam dobivanje slučajnih brojeva, koji se ponavljaju po vrijednosti i jedinstveni su.

Pozdrav svima! U ovom članku ćemo pogledati, što je novo za generiranje slučajnih brojeva u PHP 7.1.

Ovo ažuriranje nije bilo vidljivo za programere, ali je poboljšalo programski jezik PHP u području generiranja slučajnih brojeva.

Koliko je poznato, u PHP možemo koristiti funkciju rand (min, max) za generiranje slučajnih brojeva:

Eho rand (7, 17);

Ako sada osvježite stranicu, svaki put ćete dobiti novi slučajni broj.

No, nije sve tako jednostavno kako se može činiti. Bit je u tome da ovisno o tome za što generirate slučajni broj, funkcija rand () koristi različite generacijske sustave. Oni. ovisi o sustavu u kojem se koristi. Neki sustavi mogu koristiti slabe metode generiranja, odnosno dobit ćete ne sasvim slučajne brojeve.

V. PHP 7.1 ovaj problem je riješen i funkcija je dodana mt_rand ():

Odjek mt_rand (7, 17);

Ova značajka radi puno bolje, uključujući i sigurnost. Ono što je također važno znati je da ako koristite funkciju rand () v PHP 7.1, tada će se automatski prebrisati u mt_rand ()... Oni. rand () sada samo alias za mt_rand ().

Mnoge druge funkcije za dobivanje slučajnih rezultata poboljšane su u PHP 7.1... Na primjer, pogledajmo kako možemo dobiti slučajnu vrijednost iz niza:

$ names = ["Ivan", "Alexander", "Vasiliy"];
echo $ imena;

Oni. sve su funkcije poput ove poboljšane kako bi se proizveli slučajniji brojevi bolje kvalitete PHP 7.1... Da, ovo ažuriranje je prošlo nezapaženo, ali bez obzira na kojem jeziku pišete, vrlo je važno razumjeti što se događa unutar funkcije i kako se ponaša.

Zadatak
Morate generirati slučajni broj unutar numeričkog raspona.

Riješenje
Ovome služi funkcija mt_rand ():

// slučajni broj između $ gornje i $ donje, uključivo
$ slučajni_broj = mt_rand ($ donji, $ gornji);

Rasprava
Generiranje slučajnih brojeva korisno je kada trebate prikazati slučajnu sliku, nasumično dodijeliti početnu točku u igri, odabrati slučajni unos iz baze podataka ili generirati jedinstveni ID sesije. Da biste generirali slučajni broj između dvije točke, morate proslijediti dva argumenta funkciji mt_rand ():

$ slučajni_broj = mt_rand (1, 100);

Pozivanje mt_rand () bez argumenata vraća broj između nule i maksimalnog slučajnog broja koji vraća mt_getrandmax (). Računalu je teško generirati zaista slučajan broj. On puno bolje metodički slijedi upute i nije tako dobar u spontanim radnjama. Ako morate prisiliti računalo da proizvede slučajan broj, tada mu morate dati određeni skup naredbi koje se mogu ponoviti, dok sama činjenica ponavljanja čini postizanje slučajnosti manje vjerojatnim.

PHP ima dva različita generatora slučajnih brojeva: klasičnu funkciju zvanu rand () i napredniju funkciju mt_rand ().

MT (Mersenne Twister) je generator pseudo-slučajnih brojeva nazvan po francuskom redovniku i matematičaru Marinu Mersenneu, koji je proučavao proste brojeve. Algoritam ovog generatora temelji se na tim prostim brojevima. Funkcija mt_rand () brža je od funkcije rand () i proizvodi više slučajnih brojeva, pa preferiramo prve.

Ako je vaša PHP verzija starija od 4.2, prije nego što prvi put pozovete funkciju mt_rand () (ili rand ()), morate inicijalizirati generator s početnom vrijednošću pozivanjem mt_srand () (ili srand ()) funkcija. Sjeme je broj koji slučajna funkcija koristi kao osnovu za generiranje slučajnih brojeva koje vraća; odnosi se na način rješavanja gornje dileme - ponavljanje nasuprot slučajnosti.

Kao početnu vrijednost koja se mijenja vrlo brzo i s malom vjerojatnošću ponavljanja (to su svojstva koja bi trebala karakterizirati dobra početna vrijednost), možete uzeti vrijednost koju vraća vrlo točna vremenska funkcija microtime (). Dovoljno je jednom inicijalizirati generator. PHP 4.2 i noviji automatski upravlja inicijalizacijom, ali ako je početna vrijednost ručno postavljena prije prvog poziva na mt_rand (), tada je PHP ne zamjenjuje vlastitom početnom vrijednošću.

Ako trebate odabrati slučajni zapis iz baze podataka, najjednostavniji način je da prvo odredite ukupan broj polja u tablici, odaberete nasumični broj iz ovog raspona, a zatim upitate ovaj redak iz baze podataka:

$ sth = $ dbh-> upit ("SELECT COUNT (*) AS count FROM C quotes");
if ($ row = $ sth-> fetchRow ()) (
$ count = $ red;
) drugo (
die ($ row-> getMessage ());
}
$ random = mt_rand (0, $ count - 1);
$ sth = $ dbh-> upit ("SELECT quote FROM quotes LIMIT $ random, 1");
dok ($ row = $ sth-> fetchRow ()) (
ispišite $ row.

"\ n";
}

Ovaj isječak koda određuje ukupan broj redaka u tablici, generira slučajni broj iz tog raspona, a zatim koristi LIMIT $ random, 1 za SELECT jedan redak iz tablice, počevši od $ random. U MySQL verziji 3.23 ili novijoj, moguća je alternativa:

$ sth = $ dbh-> upit ("SELECT quote FROM quotes ORDER BY RAND () LIMIT 1");
dok ($ row = $ sth-> fetchRow ()) (
ispišite $ row. "\ n";
}

U tom slučaju MySQL prvo nasumično odabire redove, a zatim vraća prvi redak.

Već su me par puta pitali kako mi ide slučajni izlaz citata na mojoj web stranici u bloku " Pametni citati". Nadalje, uspio sam otkriti da je problem ovdje nedostatak razumijevanja ljudi, kako izvesti slučajni element iz niza u php -u... Zadatak je jednostavan, ali ipak, budući da se pitanja pojavljuju, morate na njih odgovoriti.

Odmah ću vam dati kôd. Recimo da postoji niz sa skupom navoda. Morate odabrati jednu slučajnu i ispisati:

$ quotes = array (); // Inicijalizacija praznog niza
$ quotes = "Budite pažljivi prema svojim mislima, oni su početak radnji."; // Prvi citat
$ quotes = "Nije najpametniji ili najjači koji preživljava, već je najviše osjetljiv na promjene."; // Drugi citat
$ quotes = "Život je planina: idete polako, brzo se spuštate."; // Treći citat
$ quotes = "Ljudi ne žele biti bogati, ljudi žele biti bogatiji od drugih."; // Četvrti citat
$ number = mt_rand (0, count ($ citati) - 1); // Uzmi slučajni broj od 0 do (duljina niza minus 1) uključivo
echo $ quotes [$ number]; // Prikaz citata
?>

Ključna točka je dobivanje slučajnog broja... Sve što trebate učiniti je postaviti ispravne granice. Ako trebate odabrati slučajni element duž cijele duljine niza, onda je to iz 0 prije ( duljina niza minus 1). A onda samo izvucite element iz niza s rezultirajućim slučajnim indeksom.

Što se tiče zadatka s navodnicima, bolje ih je pohraniti u bazu podataka. U načelu, ako je web mjesto vrlo jednostavno, to se može učiniti u tekstualnoj datoteci. Ali ako je u bazi podataka, onda je bolje koristiti RAND () i OGRANIČITI v SQL upit tako da odmah dobijete jedan i slučajan citat iz baze podataka.