Php véletlen szám 1-től 10-ig. A PHP7.1 újdonságai: véletlenszám generálás. Véletlen számok a JavaScriptben

Már párszor megkérdezték tőlem, hogyan készítek véletlenszerű árajánlatokat a weboldalamon az „okos idézetek” blokkban. Ezután sikerült rájönnöm, hogy itt az a probléma, hogy az emberek nem értik, hogyan lehet véletlenszerű elemet kiadni egy tömbből PHP-ben. A feladat egyszerű, de ennek ellenére, mivel kérdések merülnek fel, válaszolni kell rájuk.

Mindjárt megadom a kódot. Tegyük fel, hogy van egy tömb idézőjelkészlettel. És ki kell választania közülük egyet véletlenszerűen, és ki kell adnia:

A lényeg az, hogy véletlen számot kapjunk. Csak a megfelelő határokat kell felállítania. Ha véletlenszerű elemet kell kiválasztania a tömb teljes hosszában, akkor az 0-tól (tömb hossza mínusz 1) legyen. Ezután egyszerűen húzzon ki egy elemet a tömbből a kapott véletlen indexszel.

Ami az idézetekkel kapcsolatos feladatot illeti, jobb, ha adatbázisban tárolja őket. Elvileg, ha az oldal nagyon egyszerű, akkor azt szöveges fájlban is meg lehet tenni. De ha egy adatbázisban, akkor jobb a RAND() és a LIMIT használata az SQL lekérdezésben, hogy azonnal egyetlen véletlenszerű idézetet kapjon az adatbázisból.

Véletlenszám generálásához használhatja a PHP rand() vagy mt_rand() függvényét. A véletlen számok használatának követelménye gyakran felmerül a gyakorlatban változók, fájlok elnevezése, kulcsfontosságú információk létrehozása és a biztonság biztosítása során.

Véletlenszerűség és egyediség

A PHP véletlenszerű függvényének két változata van: rand() és mt_rand(). Úgy gondolják, hogy az algoritmus az első esetben egyszerűbb, és pszeudovéletlen számokat generál. A második lehetőség gyorsabb algoritmussal és jól ismert matematikai jellemzőkkel rendelkezik. A legtöbb esetben, ha véletlen számot kell kapnia, használhat egy sor PHP véletlenszerű hívást, és egyedi számkombinációt kaphat.

Ha 1-től 26-ig vagy 1-től 32-ig számokat vesz alapul, és véletlenszerűen kapja meg őket, akkor a legfontosabb információkat latin vagy cirill betűk sorozataként alakíthatja ki. Ebben az esetben a PHP véletlenszerű módja egy alfabetikus információsorozat generálásának módja, például kommunikációs csatornák vagy algoritmusok tesztelése céljából.

Egy véletlen szám ritkán egyedi, mert egy valószínűségi változó eloszlási törvénye szerint többször is megjelenhet. De ha kombinálja különösen a JavaScript nyelv statikus PHP & Math.random változóját, valódi egyedi véletlenszámot kaphat, amely idővel nem ismétlődik meg.

Az idő függvény használata

Az időfüggvény, mind a PHP, mind a JavaScript lehetővé teszi egyedi számkombinációk kialakítását, ritkán, amikor kellően sok esemény fordulhat elő egy időpontban, és a valószínűségi változó megismétlődik.

Ha a PHP véletlenszerűségét másodpercek vagy ezredmásodpercek tartományában alkalmazza a lehetséges értékek nagy tartományában, lehetőség nyílik egyedi véletlenszerű szám- vagy betűkombinációk előállítására. Mi más?

Az időfüggvény értékének, a szekvenciálisan növekvő számnak és a PHP véletlenszerű kombinációjával biztosíthatja a kliens és a szerver kommunikációs csatornáinak megbízható biztonságát, egyedi kódokat hozhat létre a változókhoz, és kiszámíthatatlan eseményeket generálhat az algoritmusokban.

A PHP véletlenszám-generátor kiváló megoldás a legtöbb feladathoz, különösen akkor, ha gyorsan, minimális erőfeszítéssel kiváló minőségű eredményeket kell elérni. A rand() és mt_rand függvények szekvenciálisan növekvő számsorokkal vagy időértékekkel együtt történő használata lehetővé teszi, hogy véletlenszerű számokat kapjon, amelyek értékben ismétlődnek és egyediek.

Inicializálja a véletlenszám-generátort. Szintaxis:

Üres srand (int mag)

Inicializálja a véletlenszám-generátort a kezdőértékkel.

Srand((dupla) mikroidő()*1000000);
$random = rand();
echo $random;

GETRANDMAX

A lehető legnagyobb véletlenszámot adja eredményül. Szintaxis:

Int getrandmax()

Ez a függvény azt a maximális értéket adja vissza, amelyet a rand() véletlenszám-generáló függvény használatával kaphatunk.

Általában 32767

Véletlen számot generál. Szintaxis:

Int rand()

Ha az opcionális min és max paraméterekkel hívjuk meg, ez a függvény egy véletlen számot generál az adott paraméterig bezárólag. Ha a min és max paraméterek hiányoznak, a rendszer egy 0 és RAND_MAX közötti számot ad vissza.

Ahhoz, hogy ez a függvény megfelelően működjön, használat előtt inicializálni kell a véletlenszám-generátort az srand() függvénnyel.

lcg_value()

LCG pszeudo-véletlen számgenerátor (PHP 4, PHP 5)

Leírás:

Lebegő lcg_value (érvénytelen)

Az lcg_value() egy pszeudovéletlen számot ad vissza a (0, 1) tartományban. A függvény két generátort kombinál 2^31-85 és 2^31-249 értékkel egy perióduson belül.

mt_getrandmax()

A lehető legnagyobb véletlenszerű értéket mutatja (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Leírás:

Int mt_getrandmax (érvénytelen)

Az mt_rand() által visszaadható maximális értéket mutatja

mt_rand()

A legjobb véletlenszerű értéket generálja (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Leírás:

int mt_rand()

A véletlenszám-generátorok sok régebbi verziója megkérdőjelezhető tulajdonságokkal rendelkezik, és lassú. Alapértelmezés szerint a PHP a rand() függvényt használja véletlen számok generálására. Az mt_rand() függvény jó helyettesítő. Véletlenszám-generátort használ, amely 4-szer gyorsabb, mint a rand() és a Mersenne Twistert használja.

Az opcionális min és max argumentumok nélkül meghívott mt_rand() 0 és RAND_MAX közötti pszeudovéletlen értéket ad vissza. Ha például véletlenszerű értékeket kell kapnia 5 és 15 között, akkor keresse meg az mt_rand (5, 15) értéket.

Példa az mt_rand() használatára

A példa futtatásának eredménye a következő lesz:

1604716014
1478613278
6

Megjegyzés

Megjegyzés: A 3.0.7 előtti verziókban a függvény második paramétere adta meg a számtartományt. Például ezekben a verziókban 5 és 15 közötti véletlen számok megszerzéséhez meg kell adni az mt_rand(5, 11) függvényt.

mt_srand()

Beállítja a legjobb véletlenszám-generátor kezdeti értékét (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Leírás:

Érvénytelen mt_srand()

Beállítja a véletlenszám-generátor kezdeti értékét a mag segítségével. A PHP 4.2.0-tól kezdve a seed nem kötelező, és a véletlenszerű értékek alapértelmezett beállításai kimaradtak.

Példa az mt_srand() használatára

Megjegyzés: A PHP 4.2.0-tól kezdve már nem szükséges inicializálni a véletlenszám-generátort az srand() vagy mt_srand() paranccsal, mivel ez most automatikusan megtörténik.

Technikailag a "véletlenszám-generátor" kifejezés értelmetlen, mivel maguk a számok nem véletlenszerűek. Például a 100 véletlen szám? Mi van a 25-tel? Ez a kifejezés valójában azt jelenti, hogy véletlenszerűen megjelenő számsorozatot hoz létre. Ez egy nehezebb kérdést vet fel: mi az a véletlen számsorozat? Az egyetlen helyes válasz: a véletlen számok sorozata olyan sorozat, amelyben minden elem nem kapcsolódik egymáshoz. Ez a meghatározás ahhoz a paradoxonhoz vezet, hogy bármely sorozat lehet véletlenszerű vagy nem véletlenszerű, attól függően, hogy a sorozatot hogyan kapjuk meg. Például a következő számsor
1 2 3 4 5 6 7 8 9 0
a billentyűzet felső sorának sorrendben történő beírásával kaptuk meg, így a sorozat nem tekinthető véletlenszerűen generáltnak. De mi van akkor, ha ugyanazt a sorozatot kapod, amikor kiveszed a számozott teniszlabdákat a hordóból. Ebben az esetben ez már egy véletlenszerűen generált sorozat. Ez a példa azt mutatja, hogy egy sorozat véletlenszerűsége attól függ, hogy hogyan kaptuk meg, és nem magától a sorozattól.

Ne feledje, hogy a számítógép által generált számsorozat determinisztikus: az első kivételével minden szám az előtte lévő számoktól függ. Technikailag ez azt jelenti, hogy számítógéppel csak kvázi véletlenszerű számsorozat állítható elő, pl. valójában nem véletlenszerűek. Ez azonban a legtöbb feladathoz elegendő, és az egyszerűség kedvéért az ilyen sorozatokat véletlenszerűnek nevezzük. Egy nagyon érdekes módszert fejlesztett ki Neumann János; gyakran négyzetgyöknek nevezik. Ennél a módszernél az előző véletlenszámot négyzetre emeljük, majd az eredményből kivonjuk a középső számjegyeket. Például, ha háromjegyű számokat hoz létre, és az előző szám 121 volt, akkor az eredmény négyzetesítésével 14641 lesz az eredmény. A középső három számjegy négyzetesítésével a következő véletlenszám 464 lesz. Ennek a módszernek az a hátránya, hogy van egy nagyon rövid ismétlési periódus, amelyet ciklusnak neveznek. Emiatt ezt a módszert ma már nem alkalmazzák. A véletlen számok előállításának modern módszerei sokkal bonyolultabbak.

Véletlen számok PHP-ben

A PHP két függvénycsoporttal rendelkezik a véletlen számokkal való munkavégzéshez. Pusztán külsőleg az mt_ előtag alapján különböztethetők meg az egyik csoport összes funkciójához.

Elavult funkciók
rand függvény Egy nulla és a RAND_MAX értéke közötti egész számot ad vissza (ami 32767). Két opcionális egész paramétere lehet – ha meg vannak adva, véletlenszám generálódik az első paramétertől a másodikig.

Echo rand(); echo rand(1100); // Adj ki egy véletlen számot 1-től 100-ig

Funkció srand. Megadja a randfüggvény által előállított véletlen számok sorozatát. Teljes paraméterrel rendelkezik - ennek a paraméternek a különböző értékeihez a rand különböző számsorozatokat állít elő. A srand függvényt csak egyszer kell meghívni a rand függvény összes hívása előtt. Használati példa:

Srand(1288); // A véletlenszám generátor inicializálása for($i=0; $iquery("SELECT COUNT(*) AS count FROM idézőjelek");
if ($sor = $sth->fetchRow()) (
$count = $sor;
) más (
die ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("SELECT idézet AZ idézetekből LIMIT $random,1");
while ($sor = $sth->fetchRow()) (
nyomtatás $sor .

"\n";
}

Ez a kódrészlet meghatározza a táblázatban lévő sorok teljes számát, véletlen számot generál ebből a tartományból, majd a LIMIT $random,1 segítségével KIVÁLASZT egy sort a táblázatból a $random pozíciótól kezdve. A MySQL 3.23-as vagy újabb verziójában egy másik lehetőség is lehetséges:

$sth = $dbh->query("SELECT idézet AZ idézetekből ORDER BY RAND() LIMIT 1");
while ($sor = $sth->fetchRow()) (
nyomtatás $sor . "\n";
}

Ebben az esetben a MySQL először véletlenszerűvé teszi a sorokat, majd visszaadja az első sort.