Autor | Zpráva | ||
---|---|---|---|
DeBon Profil |
#1 · Zasláno: 2. 6. 2008, 16:18:56
Ahoj...
Generuju random 2 čísla od jedný do dvacítky... $random_index = mt_rand(1, 20); $random_index--; $random_index1 = mt_rand(1, 20); $random_index1--; Jak by se nechala udělat podmínka, aby mi to nevygenerovalo 2 stejný čísla zároveň? Díky.. |
||
Timy Profil |
#2 · Zasláno: 2. 6. 2008, 16:25:06
V tomhle případě bude asi nejjednodušší, když zkontroluješ, jestli je $random_index různé od $random_index1. Pokud není, necháš vygenerovat nové číslo.
Můžeš si taky čísla, z kterých se bude náhodné číslo generovat, ukládat do pole a po vygenerování prvního čísla toto číslo odstraníš z pole. |
||
DeBon Profil |
#3 · Zasláno: 2. 6. 2008, 16:38:05 · Upravil/a: DeBon
Jo jasný... ale co když mi vygeneruje podruhý stejný číslo.. Všechny možnosti sem nezajistil.. i když pravděpodobnost je značně menší nemůžu říct, že to nenastane. Krom toho vymazat nemůžu protože potřebuju obě čísla naráz..
Napadlo mě akorát tohle.. ale přijde mi to takový neohrabaný... a navíc se to načítá nějak dlouho.. A teď se to nakonec nanačetlo protože to zrušilo proces kvůli dlouhýmu času:-( $random_index = mt_rand(1, 20); $random_index1 = mt_rand(1, 20); if ($random_index1!=$random_index) { while ($random_index1!=$random_index) { $random_index2 = mt_rand(1, 20); } } $random_index--; $random_index1--; |
||
Timy Profil |
#4 · Zasláno: 2. 6. 2008, 16:41:07 · Upravil/a: Timy
DeBon
Přesně tak jsem to myslel. Nebo si naplň pole čísly 1—20. Pak vylosuj číslo od 0—19 a vytáhni z pole hodnotu o tomto indexu. Tu následně z pole odstraň. Pak vylosuj číslo 0—18 a zase vytáhni z pole hodnotu. |
||
DeBon Profil |
#5 · Zasláno: 2. 6. 2008, 16:41:19 · Upravil/a: DeBon
Jééé sem vůl
$random_index = mt_rand(1, 20); $random_index1 = mt_rand(1, 20); if ($random_index1==$random_index) { while ($random_index1!==$random_index) { $random_index2 = mt_rand(1, 20); } } $random_index--; $random_index1--; mi to nešlo, protože sem tam dal blbě podmínku.. Už píšu a nemyslim:-D |
||
Timy Profil |
#6 · Zasláno: 2. 6. 2008, 16:42:25
Mimochodem proč hned po vylosování náhodné čísla obě čísla dekrementuješ? Nebude jednodušší vylosovat číslo v rozmezí o jedna menším?
|
||
DeBon Profil |
#7 · Zasláno: 2. 6. 2008, 16:50:04
Jak to myslíš? Že když mám číslo od 1 do 20 udělám random a druhej random dělat od 1 do 19?
Jestli takhle tak když mi to třeba hodí random číslo 6, tak v druhym rozmezí číslo 6 taky mám a navíc se připravim o číslo 20.. to bych to jinak musel dělat v rozmezí od 1 do x-1 a od x+1 do 20 když to mám včetně a to mi přijde složitější.. nebo jaks to myslel? |
||
krteczek Profil |
#8 · Zasláno: 2. 6. 2008, 16:57:33
DeBon: ne myslel to tak proč negeneruješ čísla hned od nula po 19?
pokud jde o náhodný výběr z array tak zkus array_rand(); |
||
DeBon Profil |
#9 · Zasláno: 2. 6. 2008, 16:58:16 · Upravil/a: DeBon
Jo takhle... Už to vidim jaks to myslel.... Myslim si že to nebude jednodužší.. Minimálně by ti to zabralo víc řádků... A číslo 20 sem uved jako přídlad já tam mam normálně měnnou proměnnou místo toho..
Ale díky |
||
krteczek Profil |
#10 · Zasláno: 2. 6. 2008, 16:58:51
když je hned po vygenerování snížíš o 1
|
||
Joker Profil |
#11 · Zasláno: 2. 6. 2008, 17:33:15
DeBon
Myslim si že to nebude jednodužší.. Minimálně by ti to zabralo víc řádků... Oni myslí tohle: $random_index = mt_rand(1, 20); $random_index--; Tj. náhodné číslo od 1 do 20 a pak se sníží o 1. Proč raději negenerovat rovnou náhodné číslo od 0 do 19? $random_index = mt_rand(0, 19); |
||
nightfish Profil |
#12 · Zasláno: 2. 6. 2008, 17:49:05
jinak ten tvůj kód by šel zkrátit na
$random_index = $random_index1 = mt_rand(1, 20); while ($random_index1 == $random_index) { $random_index1 = mt_rand(1, 20); } |
||
DeBon Profil |
#13 · Zasláno: 2. 6. 2008, 17:53:07 · Upravil/a: DeBon
Joker
Jo takhle to bylo myšleno.. Ono to byl jen příklad místo 20 tam mám (count($files) a $files mám array... Ale jo to je asi taky pravda že bych tam moh napsat ((count($files))-1).. Nightfish To je zajímavý... Díky |
||
Timy Profil |
#14 · Zasláno: 2. 6. 2008, 17:56:12
A já to myslel nějak takhle:
function deleteFromArray($array, $key) { $newArray = array(); $index = 0; for($i = 0; $i < count($array); $i++) { if($i != $key) { $newArray[$index++] = $array[$i]; } } return $newArray; } $pocetCisel = 3; $pole = array(); for($i = 0; $i < $pocetCisel; $i++) $pole[$i] = $i + 1; $index = mt_rand(0, $pocetCisel - 1); $random_index = $pole[$index]; $pole = deleteFromArray($pole, $index); $index = mt_rand(0, $pocetCisel - 2); $random_index1 = $pole[$index]; Napsal jsem si vlastní funkci na odstranění prvku z pole — nevím jestli už PHP něco takového má. Jestli jo, tak se kód docela zkrátí. |
||
nightfish Profil |
#15 · Zasláno: 2. 6. 2008, 18:07:22 · Upravil/a: nightfish
vylepšení Timyho kódu
$pole = array(); for ($i = $min; $i <= $max; $i++) $pole[] = $i; shuffle($pole); $random_index = array_pop($pole); $random_index1 = array_pop($pole); EDIT: nahrazeno array_rand za shuffle a za $min v cyklu místo čárky středník |
||
Joker Profil |
#16 · Zasláno: 2. 6. 2008, 18:12:38 · Upravil/a: Joker
nightfish
Vida, na tohle jsem snad ještě nenarazil a přitom se mi to zdá jako dost dobrý způsob, jak vybrat více různých náhodných čísel z nějaké dané řady... |
||
Časová prodleva: 16 let
|
0