Autor | Zpráva | ||
---|---|---|---|
sexusbtw Profil |
#1 · Zasláno: 31. 1. 2009, 18:33:45
Zdravím..
Potřeboval bych v php sestavit skript, který ze sekvence náhodných čísel (např. 1-5) vybíral náhodné číslo. Něco jako mt_rand(). Jenomže potřebuji, aby jedno, případně více čísel mělo jakousi prioritu a zobrazovalo se častěji - takže by to dojem náhodného zobrazování spíše navozovalo... Asi bude dobře, když popíšu konkrétní věc: Mám na FTP složku s Flash bannery, které se náhodně zobrazují. Není problém projít direktorář a načíst názvy souborů do pole. Pak se dá krásně vybrat náhodné číslo pole. Jenže by z marketingového hlediska bylo dobře, kdyby se některé lukrativní bannery zobrazovaly častěji. Představoval jsem to tak, že by se bannerům dávala procentuální priorita, ale nevím jak... Díky.. |
||
srigi Profil |
#2 · Zasláno: 31. 1. 2009, 18:49:19
sexusbtw
Nacitaj nazvy bannerov do pola, bannery s vyssou prioritou pridaj do pola viackrat. Napr. budes mat prioritu 1 az 50, baner s prioritou 50 nacitaj do pola 50x a podobne. Nakoniec pole premiesaj -> array_shuffle() a vyber vzdy prvu polozku pola -> array_shift(). |
||
Alphard Profil |
#3 · Zasláno: 31. 1. 2009, 18:59:11
„Nakoniec pole premiesaj -> array_shuffle()“
a kdyby taková funkce existovala, bylo by to úplně supr :-) shuffle() |
||
sexusbtw Profil |
#4 · Zasláno: 31. 1. 2009, 19:34:04
srigi - vidíš to mě vůbec nenapadlo.. Děkuji ti!
array_shift neznám, ale napadla me takovato kontrukce: $bannery = array(); // zde bude pole, kde budou prioritni bannery vicekrat $shuffle($bannery); // zamichame $cislo_nahodneho_banneru = rand(0, sizeof($bannery)); //vybereme nahodne cislo pole, bannery co jsou vicekrat maji logicky vyšší šanci $nahodny_baner_s_prioritou = $bannery[$cislo_nahodneho_banneru]; //dostavame "nahodne cislo" |
||
sexusbtw Profil |
#5 · Zasláno: 31. 1. 2009, 19:35:55
shuffle($bannery); // zamichame - ta promenna tam samozrejme nemela co delat..
|
||
Alphard Profil |
#6 · Zasláno: 31. 1. 2009, 19:57:11
nemá smysl míchat pole a pak ještě vybírat náhodný klíč
stejně tak bych se vykašlal na array_shift $bannery = array(); // zde bude pole, kde budou prioritni bannery vicekrat shuffle($bannery); // zamichame $bannery[0]; // zpracujte, jak chcete |
||
sexusbtw Profil |
#7 · Zasláno: 31. 1. 2009, 20:23:33
Alphard: to máš pravdu, když už je to zamíchané, není třeba "znovu vybírat náhodně", stačí první klíč...
|
||
srigi Profil |
#8 · Zasláno: 31. 1. 2009, 20:39:45
sexusbtw
"Dvojitou nahodou" by si poskodil ideu mojho navrhu. Ked zamiesas pole, musis vyberat vzdy ten isty prvok. Naopak, mozes mat pole uporiadane a vyberas nahodny prvok. Ale nikdy obe metody naraz! |
||
Timy Profil |
#9 · Zasláno: 31. 1. 2009, 21:08:04
Já bych spíš vybíral náhodný index, protože to bude řádově jednodušší než míchat pole.
|
||
AM_ Profil |
#10 · Zasláno: 31. 1. 2009, 21:15:49
S tím mícháním pole by to mělo smysl, kdyby se to pořadí třeba někam uložilo a pak bannery "rotovaly" a tím by se 100% zaručilo, že se postupně zobrazí všechny. Ale zákon pravděpodobnosti garantuje téměř stejný výsledek za cenu mnohem méně strojového času vybráním náhodného prvku, taky bych to nemíchal.
|
||
sexusbtw Profil |
#11 · Zasláno: 31. 1. 2009, 21:21:11
takže navrhujte tohle?
$bannery = array(); // zde bude pole, kde budou prioritni bannery vicekrat $cislo_nahodneho_banneru = rand(0, sizeof($bannery)); //vybereme nahodne cislo pole, bannery co jsou vicekrat maji logicky vyšší šanci $bannery[$cislo_nahodneho_banneru]; // vystup |
||
Timy Profil |
#12 · Zasláno: 31. 1. 2009, 21:23:06
sexusbtw
int rand ( int $min , int $max ) $cislo_nahodneho_banneru = rand(0, sizeof($bannery) - 1); Jinak by to mohlo vygenerovat index rovný počtu prvků v poli, což je ale o jedno políčko za koncem pole :-). |
||
sexusbtw Profil |
#13 · Zasláno: 31. 1. 2009, 22:55:26
Timy: jasně toho jsem byl vědom - klice v poli zacinaji nulou, jen jsem to v rychlosti prehledl
Děkuji všem za konstruktivní rady, jste lidi na pravém místě. Ještě jednou díky... |
||
Časová prodleva: 21 dní
|
|||
necesp Profil * |
#14 · Zasláno: 21. 2. 2009, 20:44:56
Dobrej kod.
A kdybych chtěl k tomu obrázku připsat nějaký text??? Takto obr1 = text1 obr2 = text2 obr3 = text3 atd Děkuji za radu. Petr |
||
_es Profil |
#15 · Zasláno: 22. 2. 2009, 00:11:50
Nechce sa mi rozmýšľať nad kódom, navrhnem to len matematicky,
tak aby sa pravdepodobnosť každého bannera dala nastaviť ľubovoľne: * Zvolí sa rozlíšenie - napríklad 1000 hodnôt. * Každému banneru sa pridelia 2 čísla - rozsah v intervale 1 až 1000, tak, aby sa rozsahy jednotlivých bannerov neprekrývali a bol pokrytý celý interval 1000 hodnôt. * Po vygenerovaní náhodného celého čísla medzi 1 a 1000 sa zistí, do akého rozsahu to číslo patrí, teda aký banner sa má zobraziť. |
||
Časová prodleva: 17 let
|
0