Autor | Zpráva | ||
---|---|---|---|
Zelenáš Profil * |
#1 · Zasláno: 15. 4. 2012, 19:38:26
Potřeboval bych generovat opakovaný náhodný výběr čísla mezi 1 - 10000, tak aby již jednou vybrané číslo vypadlo z možného výběru, dalo by se to nějak realizovat bez databáze jen pomocí PHP? Poradí někdo zelenáčovi ;-) díky
|
||
Again Profil |
Náhodné čísla můžeš generovat pomocí funkce rand, následně ukládat do textového souboru a poté kontrolovat třeba podmínkou, jestli číslo už bylo vygenerované nebo ne.
EDIT: Možná jsem to pochopil špatně, dané číslo se bude generovat při refreshi stránky, nebo na jedné stránce se vypíše x čísel v náhodném výběru ? V případě druhé možnosti, je možné čísla ukládat rovnou do pole. |
||
Aleš Janda Profil |
#3 · Zasláno: 15. 4. 2012, 22:43:24
Again:
„Náhodné čísla můžeš generovat pomocí funkce rand, následně ukládat do textového souboru a poté kontrolovat třeba podmínkou, jestli číslo už bylo vygenerované nebo ne.“ Tohle má složitost n^2. Při vyšším počtu možných hodnot tedy bude dost náročné. Lepší je vygenerovat posloupnost čísel a tu náhodně zamíchat. A pak vracet postupně prvky z té zamíchané posloupnosti. |
||
mzk Profil * |
#4 · Zasláno: 16. 4. 2012, 18:01:48
Zelenáš:
pokud je to v rámci jedné stránky, tak můžeš využít třeba pole $cisla = array(); do { $cisla[rand(1,1000)] = 1; } while (count($cisla) < pocet); |
||
juriad Profil |
#5 · Zasláno: 16. 4. 2012, 18:29:42
$cisla = array(); for( $i = 1; $i<=1000; $i++) { $cisla[$i-1] = $i; } for( $i = 999; $i>=0; $i--) { // postupně si na $i-tou pozici ukládáš náhodný prvek ze předu pole $rand = rand(0,999); $tmp = $cisla[$i]; $cisla[$i] = $cisla[$rand]; $cisla[$rand] = $tmp; } Tímto dostaneš pole velikosti 1000, ve kterém bude každé číslo právě jednou, stačí aby sis vzal prvních několik prvků. |
||
Časová prodleva: 11 let
|
0