| 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: 14 let
|
|||
0