Php náhodné číslo od 1 do 10. Co je nového v PHP7.1: Generování náhodných čísel. Náhodná čísla v JavaScriptu

Už jsem byl několikrát dotázán, jak dělám náhodné citace na svém webu v bloku „Inteligentní nabídky“. Dále se mi podařilo zjistit, že problém je v tom, že lidé nechápou, jak vypsat náhodný prvek z pole v PHP. Úkol je jednoduchý, ale přesto, protože se objevují otázky, musí být zodpovězeny.

Hned vám dám kód. Řekněme, že existuje pole se sadou uvozovek. A musíte vybrat jeden náhodný z nich a výstup:

Klíčovým bodem je získání náhodného čísla. Stačí jen nastavit správné hranice. Pokud potřebujete vybrat náhodný prvek po celé délce pole, pak je od 0 do (délka pole mínus 1). A pak jednoduše vytáhněte prvek z pole s výsledným náhodným indexem.

Pokud jde o úlohu s uvozovkami, je lepší je uložit do databáze. V zásadě, pokud je web velmi jednoduchý, lze jej provést v textovém souboru. Ale pokud v databázi, pak je lepší použít RAND() a LIMIT v SQL dotazu, abyste okamžitě dostali jedinou a náhodnou nabídku z databáze.

Pro vygenerování náhodného čísla můžete použít funkci PHP rand() nebo mt_rand(). Požadavek na použití náhodných čísel se v praxi často objevuje pro pojmenování proměnných, souborů, vytváření klíčových informací a zajištění bezpečnosti.

Náhodnost a jedinečnost

Náhodná funkce PHP existuje ve dvou variantách: rand() a mt_rand(). Předpokládá se, že algoritmus v prvním případě je jednodušší a generuje pseudonáhodná čísla. Druhá možnost má rychlejší algoritmus a dobře známé matematické charakteristiky. Ve většině případů, kdy potřebujete získat náhodné číslo, můžete použít sérii náhodných volání PHP a získat jedinečnou kombinaci čísel.

Pokud jako základ vezmete čísla od 1 do 26 nebo od 1 do 32 a získáte je náhodně, můžete klíčové informace vytvořit jako posloupnost písmen latinky nebo azbuky. PHP random je v tomto případě způsob generování sekvence abecedních informací, například pro účely testování komunikačních kanálů nebo algoritmů.

Náhodné číslo je zřídka jedinečné, protože se může objevit vícekrát podle distribučního zákona náhodné veličiny. Pokud ale zkombinujete zejména statickou proměnnou PHP & Math.random jazyka JavaScript, můžete získat skutečné jedinečné náhodné číslo, které se nebude časem opakovat.

Použití funkce času

Časová funkce, jak PHP, tak JavaScript, vám umožňuje vytvářet jedinečné kombinace čísel, jen zřídka, když se v jednom okamžiku může objevit dostatečně velký počet událostí a náhodná veličina se bude opakovat.

Aplikací PHP náhodně v rozsahu sekund nebo milisekund ve velkém rozsahu možných hodnot je možné získat jedinečné náhodné kombinace čísel nebo písmen. Co jiného?

Kombinací hodnoty časové funkce, postupně rostoucího počtu a PHP náhodnosti můžete zajistit spolehlivé zabezpečení komunikačních kanálů klienta a serveru, vytvářet jedinečné kódy pro proměnné a generovat nepředvídatelné události v algoritmech.

PHP generátor náhodných čísel je vynikajícím řešením pro většinu úkolů, zvláště když potřebujete rychle získat vysoce kvalitní výsledky s minimálním úsilím. Použití funkcí rand() a mt_rand ve spojení s postupně rostoucími řadami čísel nebo časových hodnot vám umožňuje získat náhodná čísla, opakující se v hodnotách a jedinečná.

Inicializuje generátor náhodných čísel. Syntax:

Void srand (int seed)

Inicializuje generátor náhodných čísel počáteční hodnotou.

Srand((dvojitý) mikročas()*1000000);
$náhodný = rand();
echo $náhodný;

GETRANDMAX

Vrátí největší možné náhodné číslo. Syntax:

Int getrandmax()

Tato funkce vrací maximální hodnotu, kterou lze získat pomocí funkce generování náhodných čísel rand().

Obvykle je to 32767

Vygeneruje náhodné číslo. Syntax:

Int rand()

Při volání s volitelnými parametry min a max tato funkce generuje náhodné číslo až do těchto parametrů včetně. Pokud parametry min a max chybí, vrátí se číslo v rozsahu od 0 do RAND_MAX.

Aby tato funkce fungovala správně, musíte před jejím použitím inicializovat generátor náhodných čísel pomocí funkce srand().

lcg_value()

LCG generátor pseudonáhodných čísel (PHP 4, PHP 5)

Popis:

Float lcg_value (void)

lcg_value() vrací pseudonáhodné číslo v rozsahu (0, 1). Funkce kombinuje dva generátory s 2^31 - 85 a 2^31 - 249 v období.

mt_getrandmax()

Zobrazuje největší možnou náhodnou hodnotu (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Popis:

Int mt_getrandmax (neplatné)

Zobrazuje maximální hodnotu, kterou může vrátit mt_rand()

mt_rand()

Generuje nejlepší náhodnou hodnotu (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Popis:

int mt_rand()

Mnoho starších verzí generátorů náhodných čísel má sporné vlastnosti a jsou pomalé. PHP standardně používá funkci rand() ke generování náhodných čísel. Funkce mt_rand() je dobrou náhradou. Používá generátor náhodných čísel, který je 4krát rychlejší než rand() a používá Mersenne Twister.

Volá se bez volitelných argumentů min a max, vrací mt_rand() pseudonáhodnou hodnotu v rozsahu od 0 do RAND_MAX. Pokud potřebujete získat například náhodné hodnoty mezi 5 a 15 včetně, vyhledejte mt_rand (5, 15).

Příklad použití mt_rand()

Výsledek spuštění tohoto příkladu bude něco takového:

1604716014
1478613278
6

Komentář

Poznámka: Ve verzích před 3.0.7 určoval druhý parametr funkce rozsah čísel. Chcete-li například v těchto verzích získat náhodná čísla mezi 5 a 15, musíte zadat funkci mt_rand(5, 11).

mt_srand()

Nastavuje počáteční hodnotu nejlepšího generátoru náhodných čísel (PHP 3 >= 3.0.6, PHP 4, PHP 5)

Popis:

Void mt_srand()

Nastaví počáteční hodnotu generátoru náhodných čísel pomocí seed. Od PHP 4.2.0 je seed nepovinný a výchozí nastavení pro náhodné hodnoty jsou vynechány.

Příklad použití mt_srand()

Poznámka: Od PHP 4.2.0 již není nutné inicializovat generátor náhodných čísel pomocí srand() nebo mt_srand(), protože to se nyní provádí automaticky.

Technicky je termín „generátor náhodných čísel“ nesmysl, jelikož čísla sama o sobě náhodná nejsou. Je například 100 náhodné číslo? A co 25? Tento termín ve skutečnosti znamená, že vytváří posloupnost čísel, která se objevují náhodně. To vyvolává složitější otázku: co je posloupnost náhodných čísel? Jediná správná odpověď: posloupnost náhodných čísel je posloupnost, ve které všechny prvky spolu nesouvisí. Tato definice vede k paradoxu, že jakákoli sekvence může být buď náhodná, nebo nenáhodná, v závislosti na tom, jak je sekvence získána. Například následující řetězec čísel
1 2 3 4 5 6 7 8 9 0
byla získána zadáním horního řádku klávesnice v pořadí, takže sekvenci nelze považovat za náhodně vygenerovanou. Ale co když dostanete stejnou sekvenci, když vyjmete očíslované tenisové míčky z hlavně. V tomto případě se již jedná o náhodně vygenerovanou sekvenci. Tento příklad ukazuje, že náhodnost sekvence závisí na tom, jak byla získána, a ne na sekvenci samotné.

Pamatujte, že počítačově generovaná posloupnost čísel je deterministická: každé číslo kromě prvního závisí na číslech před ním. Technicky to znamená, že počítač může generovat pouze kvazináhodnou posloupnost čísel, tzn. ve skutečnosti nejsou skutečně náhodné. To však pro většinu úloh postačuje a pro jednoduchost budeme takové sekvence nazývat náhodné. Jednu velmi zajímavou metodu vyvinul John von Neumann; často se mu říká odmocnina. V této metodě je předchozí náhodné číslo umocněno a poté jsou z výsledku extrahovány prostřední číslice. Pokud například vytváříte čísla se třemi číslicemi a předchozí číslo bylo 121, pak umocnění dává výsledek 14641. Izolováním prostředních tří číslic získáte další náhodné číslo 464. Nevýhodou této metody je, že má velmi krátká perioda opakování, nazývaná cyklus . Z tohoto důvodu se dnes tato metoda nepoužívá. Moderní metody generování náhodných čísel jsou mnohem složitější.

Náhodná čísla v PHP

PHP má dvě skupiny funkcí pro práci s náhodnými čísly. Čistě externě je lze odlišit prefixem mt_ pro všechny funkce jedné ze skupin.

Zastaralé funkce
funkce rand Vrátí celé číslo mezi nulou a hodnotou RAND_MAX (což je 32767). Může mít dva volitelné celočíselné parametry – pokud jsou zadány, vygeneruje se náhodné číslo od prvního parametru po druhý.

Echo rand(); echo rand(1 100); // Vydej náhodné číslo od 1 do 100

Funkční srand. Určuje posloupnost náhodných čísel vytvořených funkcí rand. Má celý parametr - pro různé hodnoty tohoto parametru rand vytvoří různé sekvence čísel. Funkci srand stačí zavolat pouze jednou před všemi voláními funkce rand. Příklad použití:

Srand(1288); // Inicializace generátoru náhodných čísel for($i=0; $iquery("SELECT COUNT(*) AS count FROM uvozovek");
if ($row = $sth->fetchRow()) (
$počet = $řádek;
) jinak (
zemřít ($row->getMessage());
}
$random = mt_rand(0, $počet - 1);
$sth = $dbh->query("VYBRAT citaci FROM LIMIT uvozovek $random,1");
while ($row = $sth->fetchRow()) (
tisk $řádek .

"\n";
}

Tento fragment kódu určuje celkový počet řádků v tabulce, vygeneruje náhodné číslo z tohoto rozsahu a poté použije LIMIT $random,1 k VÝBĚRU jednoho řádku z tabulky počínaje pozicí $random. V MySQL verze 3.23 nebo vyšší je možná alternativní možnost:

$sth = $dbh->query("VYBRAT citaci Z uvozovek ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) (
tisk $řádek . "\n";
}

V tomto případě MySQL nejprve náhodně rozdělí řádky a poté vrátí první řádek.