Autor | Zpráva | ||
---|---|---|---|
RErnst Profil * |
#1 · Zasláno: 13. 11. 2010, 00:56:53
Zdravím,
sháním nějaký php script, kterými vybere z hodnot A a B a poté vypíše jen jednu z nich. Jde mi o to, abych zadal několik hodnot, třeba rohlík,chleba a houska a poté by mi to vypsalo jen jednu z nich a když to obnovim, vypíše jinou. |
||
LosFilipos Profil |
#2 · Zasláno: 13. 11. 2010, 01:02:42
$pole = array("rohlik","houska","něco"); echo $pole[rand(0,count($pole))]; |
||
RErnst Profil * |
#3 · Zasláno: 13. 11. 2010, 01:12:29
Bohužel nefunguje viz : http://spustit.cz/Novy1.php
|
||
LosFilipos Profil |
#4 · Zasláno: 13. 11. 2010, 01:17:21 · Upravil/a: LosFilipos
Chybka se vloudila...
$pole = array("rohlik","houska","něco"); echo $pole[rand(0,count($pole)-1)]; Na funckčnost to ovšem nemá zas tak velký vliv. Jen se jednou za čas nezobrazilo nic... Funguje zde: www.kralici-hop.cz/test/ |
||
Alphard Profil |
#5 · Zasláno: 13. 11. 2010, 01:20:44
[#4] LosFilipos
Podobné problémy si ušetříte funkcí array_rand(). RErnst: Alternativně lze použít shuffle(), ale tady zřejmě nepřinese žádnou výraznou výhodu. |
||
rernst Profil * |
#6 · Zasláno: 13. 11. 2010, 01:31:33
a co tam znamená ta 0?
|
||
rernst Profil * |
#7 · Zasláno: 13. 11. 2010, 01:34:27
A taky ještě jestli je možné to nějak ošetřit, aby to nebylo 2krát za sebou stejné?
|
||
LosFilipos Profil |
#8 · Zasláno: 13. 11. 2010, 01:39:42 · Upravil/a: LosFilipos
Mno jak napsal Alphard, funkce array_rand() řeší vlastně to, co jsem se snažil opsat, tudíž bych použil právě array_rand().
Ale v té mojí ukázce probíhá asi toto: funkce rand() vybere náhodné číslo v rozmezí 0 až počet-prvků-z-pole-minus-1 a vypíše prvek z pole právě s tímto klíčem... Protože prvky toho pole mají klíče následující $pole[0]=rohlik $pole[1]=houska $pole[2]=něco |
||
rernst Profil * |
#9 · Zasláno: 13. 11. 2010, 01:44:04
a jak přesně to prosím udělat s array_rand()
|
||
LosFilipos Profil |
#10 · Zasláno: 13. 11. 2010, 01:55:00 · Upravil/a: LosFilipos
$pole = array("rohlik","houska","něco"); echo $pole[array_rand($pole)]; rernst: „A taky ještě jestli je možné to nějak ošetřit, aby to nebylo 2krát za sebou stejné?“ Jelikož tohle vypisuje náhodné prvky z pole, tak ne. Šlo by to udělat jinak, např. pomocí $_SESSION: session_start(); // tohle musí být před jakýmkoli výstupem... $pole = array("rohlik","houska","něco"); if(!isset($_SESSION["zobraz"])) { $_SESSION["zobraz"]==0; } echo $pole[$_SESSION["zobraz"]]; $_SESSION["zobraz"]++; if($_SESSION["zobraz"]>=count($pole)) { $_SESSION["zobraz"] = 0; } Tohle vždy při načtení stránky zobrazí další prvek z pole, když se pole vyčerpá, skočí na začátek... |
||
rernst Profil * |
#11 · Zasláno: 13. 11. 2010, 02:22:51
Problém je, že napoprvé to nic nenačte, až po aktualizaci viz: http://spustit.cz/test.php
a také pokud to dam takto do přehrávače, tak to taky nejd viz: http://spustit.cz/articles.php?article_id=106 |
||
LosFilipos Profil |
#12 · Zasláno: 13. 11. 2010, 12:58:07
Omlouvám se, mám tam překlep. Ta podmínka s if má vypadat takto:
if(!isset($_SESSION["zobraz"])) { $_SESSION["zobraz"]=0; } Nějak se mi tam vloudilo druhé rovnáse:-/ Takhle to bude fungovat od prvního načtení stránky. |
||
RErnst Profil * |
#13 · Zasláno: 13. 11. 2010, 13:38:04
ok, moc dík, hned jak to půjde tak to zkusím, teď jsem na mobilu..
|
||
Rernst Profil * |
#14 · Zasláno: 15. 11. 2010, 22:14:57
Zjistil jsem takový problém a to ten, že to generování není uplně náhodné, ale docela dost pravidelné, když použiji toto:
session_start(); // tohle musí být před jakýmkoli výstupem... $pole = array("rohlik","houska","něco"); if(!isset($_SESSION["zobraz"])) { $_SESSION["zobraz"]==0; } echo $pole[$_SESSION["zobraz"]]; $_SESSION["zobraz"]++; if($_SESSION["zobraz"]>=count($pole)) { $_SESSION["zobraz"] = 0; } Tak se vždycky vygeneruje jedna věc, restartuji prohlížeč (vypnu a zapnu) a poté se vygeneruje ta samá věc, nevíš jak tomu zabránit? ..snad mě chápeš |
||
LosFilipos Profil |
#15 · Zasláno: 15. 11. 2010, 22:28:59 · Upravil/a: LosFilipos
Rernst:
„Zjistil jsem takový problém a to ten, že to generování není uplně náhodné, ale docela dost pravidelné“ Ano, protože tam se to pole prochází postupně od začátku do konce, aby se zabránilo opakování výsledků. „Tak se vždycky vygeneruje jedna věc, restartuji prohlížeč (vypnu a zapnu) a poté se vygeneruje ta samá věc, nevíš jak tomu zabránit?“ if(!isset($_SESSION["zobraz"])) { $_SESSION["zobraz"]=rand(0,count($pole)-1); } // zbytek kódu beze změny Ještě k tomu náhodnému generování. Musíš se rozhodnout, zda je pro tebe priorita náhodný výběr prvků z pole, nebo aby se daný prvek neoběvil 2x za sebou. Jistě, šlo by napsat funkci, která by náhodně vybírala z pole a poté kontrolovala, zda se stejný prvek nezobrazil už předtím, ale bylo by to daleko komplikovanější a muselo by se použít nějaké zběsilé rekurzivní funkce, což je dolela náročné na systémové zdroje... |
||
LosFilipos Profil |
#16 · Zasláno: 15. 11. 2010, 22:40:20
Rernst:
Tak takhle by mohla vypadat ta funkce na zcela náhodné vybírání prvků z pole s ochranou proti opakování záznamů: session_start(); $pole = array("rohlik","houska","něco"); function rand_z_pole($pole,$old_key) { $key = array_rand($pole); if($key == $old_key) { return rand_z_pole($pole,$old_key); } else { $_SESSION["key"] = $key; return $pole[$key]; } } echo rand_z_pole($pole,$_SESSION["key"]); |
||
Rernst Profil * |
#17 · Zasláno: 16. 11. 2010, 14:50:21
LosFilipos: Ok, dík, takhle to funguje :)
|
||
Časová prodleva: 13 let
|
0