Počítače Okna Internet

Použití náhodné funkce PHP. Náhodný výběr z pole v php php náhodné celé číslo

Ke generová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 přichází 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ší a známý algoritmus 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.

Vezmete-li čísla od 1 do 26 nebo od 1 do 32 jako základ a získáte je náhodně, můžete sestavit klíčové informace jako posloupnost písmen latinky nebo azbuky. V tomto případě je PHP random způsob generování sekvence abecedních informací, například pro 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 zákona o rozdělení náhodné veličiny. Ale pokud spojíme zejména statiku PHP proměnná& Math.random JavaScriptu, můžete získat skutečné jedinečné náhodné číslo, které se nebude v průběhu času opakovat.

Pomocí funkce času

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

Použitím PHP náhodně v rozsahu sekund nebo milisekund v širokém rozsahu možných hodnot můžete 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áhodného, ​​nebo můžete zajistit spolehlivé zabezpečení komunikačních kanálů klienta a serveru, vytvoříte unikátní kódy pro proměnné 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 úloh, zvláště když potřebujete rychle získat vysoce kvalitní výsledky s minimálními náklady. 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 a jedinečná.

Ahoj všichni! V tomto článku se podíváme na co je nového pro generování náhodných čísel v PHP 7.1.

Tato aktualizace se stala vývojářům neviditelně, ale zlepšila programovací jazyk PHP v oblasti generování náhodných čísel.

Pokud je známo, v PHP můžeme použít funkci rand (min, max) pro generování náhodných čísel:

Echo rand (7, 17);

Pokud nyní stránku obnovíte, obdržíte pokaždé nové náhodné číslo.

Ale ne všechno je tak jednoduché, jak by se mohlo zdát. Jde o to, že v závislosti na tom, pro co generujete náhodné číslo, funkce rand () používá různé systémy generace. Tito. záleží na systému, ve kterém se používá. Některé systémy mohou používat slabé metody generování, respektive budete dostávat ne zcela náhodná čísla.

PROTI PHP 7.1 tento problém byl opraven a funkce byla přidána mt_rand ():

Echo mt_rand (7, 17);

Tato funkce funguje mnohem lépe, včetně zabezpečení. Důležité je také vědět, že pokud funkci používáte rand () proti PHP 7.1, pak bude automaticky přepsán na mt_rand ()... Tito. rand () nyní jen alias pro mt_rand ().

Bylo vylepšeno mnoho dalších funkcí pro získávání náhodných výsledků PHP 7.1... Podívejme se například, jak můžeme získat náhodnou hodnotu z pole:

$ jmen = ["Ivan", "Alexander", "Vasiliy"];
echo $ jmen;

Tito. všechny funkce, jako je tato, byly vylepšeny, aby produkovaly náhodná čísla v lepší kvalitě PHP 7.1... Ano, tato aktualizace zůstala bez povšimnutí, ale bez ohledu na to, v jakém jazyce píšete, je velmi důležité porozumět tomu, co se děje uvnitř funkce a jak se chová.

Úkol
Musíte vygenerovat náhodné číslo v číselném rozsahu.

Řešení
K tomu slouží funkce mt_rand ():

// náhodné číslo mezi $ horní a $ dolní, včetně
$ náhodné_číslo = mt_rand ($ nižší, $ horní);

Diskuse
Generování náhodných čísel je užitečné, když potřebujete zobrazit náhodný obrázek, náhodně přiřadit počáteční bod ve hře, vybrat náhodný záznam z databáze nebo vygenerovat jedinečný identifikátor zasedání. Chcete-li vygenerovat náhodné číslo mezi dvěma body, musíte funkci mt_rand () předat dva argumenty:

$ náhodné_číslo = mt_rand (1, 100);

Volání mt_rand () bez argumentů vrátí číslo mezi nulou a maximálním náhodným číslem vráceným mt_getrandmax (). Pro počítač je obtížné vygenerovat skutečně náhodné číslo. Je mnohem lepší v metodickém dodržování pokynů a není tak dobrý ve spontánních akcích, které se od něj vyžadují. Pokud potřebujete donutit počítač, aby vytvořil náhodné číslo, musíte mu dát určitou sadu opakovatelných příkazů, zatímco samotný fakt opakování snižuje pravděpodobnost dosažení náhodnosti.

PHP má dva různé generátory náhodných čísel: klasickou funkci zvanou rand () a pokročilejší funkci mt_rand ().

MT (Mersenne Twister) je generátor pseudonáhodných čísel pojmenovaný po francouzském mnichovi a matematikovi Marinu Mersennovi, který studoval prvočísla. Algoritmus tohoto generátoru je založen na těchto prvočíslech. Funkce mt_rand () je rychlejší než funkce rand () a produkuje více náhodných čísel, takže dáváme přednost té první.

Pokud je vaše verze PHP starší než 4.2, pak před prvním voláním funkce mt_rand () (nebo rand ()) musíte inicializovat generátor s počáteční hodnotou voláním mt_srand () (nebo srand ()) funkce. Seed je číslo, které náhodná funkce používá jako základ pro generování náhodných čísel, která vrací; odkazuje na způsob řešení výše uvedeného dilematu - opakování versus náhodnost.

Jako počáteční hodnotu, která se mění velmi rychle a s nízkou pravděpodobností opakovatelnosti (tyto vlastnosti by měly charakterizovat dobrou počáteční hodnotu), můžete vzít hodnotu vrácenou vysoce přesnou časovou funkcí microtime (). Generátor stačí jednou inicializovat. PHP 4.2 a novější automaticky zvládnou inicializaci, ale pokud je počáteční hodnota ručně nastavena před prvním voláním mt_rand (), pak ji PHP nenahradí vlastní počáteční hodnotou.

Pokud potřebujete vybrat náhodný záznam z databáze, nejjednodušším způsobem je nejprve určit celkový počet polí v tabulce, vybrat náhodné číslo z tohoto rozsahu a poté dotaz na tento řádek z databáze:

$ sth = $ dbh-> dotaz ("SELECT COUNT (*) AS count FROM uvozovek");
if ($ row = $ sth-> fetchRow ()) (
$ počet = $ řádek;
) jinak (
zemřít ($ row-> getMessage ());
}
$ náhodný = mt_rand (0, počet $ - 1);
$ sth = $ dbh-> dotaz ("VYBRAT citát FROM uvozovek LIMIT $ náhodný, 1");
while ($ row = $ sth-> fetchRow ()) (
vytisknout řá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 $ random. V MySQL verze 3.23 nebo vyšší je možná alternativa:

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

V tomto případě MySQL nejprve randomizuje řádky a poté vrátí první řádek.

Už se mě párkrát ptali, jak se mám náhodný výstup uvozovek na mém webu v bloku " Chytré citáty Dále se mi podařilo zjistit, že problémem je zde nepochopení lidí, jak odvodit náhodný prvek z pole v php... Úkol je jednoduchý, ale přesto, když se objeví otázky, musíte na ně odpovědět.

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

$ uvozovky = pole (); // Inicializuje prázdné pole
$ quotes = "Buďte pozorní ke svým myšlenkám, jsou začátkem činů."; // První citace
$ quotes = "Nepřežije ten nejchytřejší nebo nejsilnější, ale ten nejnáchylnější ke změnám."; // Druhý citát
$ quotes = "Život je hora: pomalu stoupáš, rychle klesáš."; // Třetí citát
$ quotes = "Lidé nechtějí být bohatí, lidé chtějí být bohatší než ostatní."; // Čtvrtý citát
$ číslo = mt_rand (0, počet ($ uvozovky) - 1); // Vezměte náhodné číslo od 0 do (délka pole mínus 1) včetně
echo $ uvozovky [číslo $]; // Zobrazení nabídky
?>

Klíčový moment- tohle je získání náhodného čísla... Jediné, co musíte udělat, je nastavit správné hranice. Pokud potřebujete vybrat náhodný prvek po celé délce pole, pak je to od 0 před ( délka pole mínus 1). A pak už jen 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ý, pak je možné v textový soubor... Ale pokud v databázi, pak je lepší použít RAND () a OMEZIT proti SQL dotaz takže okamžitě získáte jednu a náhodnou nabídku z databáze.