Банерокрутилка с приоритетами...

[slon]

Guest
Банерокрутилка с приоритетами...

Нужна помощь в разработке алгоритма.

Есть некое кол-во банеров, которые надо показывать по очереди, но с разными приоритетами. Например: banner1 и banner2 показывать всем юзерам с приоритетами 3/2...
 

Larson

Новичок
Количество показов 1-ого баннера * его приоритет = количество показов 2-ого банера * его приоритет = ... количество показов N-ого банера * его приоритет.
 

[slon]

Guest
а если не по кол-ву показов, а скажем по периоду времени...
 

Larson

Новичок
Как это по периоду времени?

Зы, только в первом варианте, чем меньше приоритет, тем выше показываемость.
 

[slon]

Guest
я имею ввиду, что банер должен показаться, к примеру, не 10 000 раз, а с 1 июля по 31 августа....
 

[slon]

Guest
Может я просто от жары туплю, но понять данного алгоритма немогу...

Если не затруднит привеедите в пример конкретную фомулу...
 

Protoss

Guest
Когда то делал такую херню . Приведённый ниже кусок кода самостоятельно не рабочий - он выдернут из рабочего проекта.
ЗЫ И с небольшими извратами - меня инфо по баннерам заставили в именах файлов хранить

Код:
function GetBannerNew($type) {
                $allbanners = $this->GetBannersArray();
                mt_srand((double)microtime()*1000000000);
                $arr = $this->GetBannerArr(&$allbanners,'type', 'A');
                if( rand(0,1) || !is_array($arr) ) {
                        $arr_temp = $this->GetBannerArr(&$allbanners,'type', 'B');
                        if (is_array($arr_temp)) $arr = $arr_temp;
                }

                $banners = $this->GetBannerArr(&$arr,'size', $type);
                $arr = array();
                $i = 0;
                $b = sizeof($banners);
                $max_i = 0;
                for ($k=0; $k<$b; $k++){
                        if ( $banners[$k]['proc'] >= $banners[$max_i]['proc'] ) $max_i = $k;
                        $p = $p + $banners[$k]['proc'];
                }
                $p = 100/$p;

                for ($k=0; $k<$b; $k++){
                        $l = $i + (int)($banners[$k]['proc']*$p);
                        for (; $i<$l; $i++){
                                $arr[$i]=$banners[$k]['name'].".".$banners[$k]['proc'];
                        }
                }
                if ( $i<99 ) $arr = array_pad($arr,100,$arr[$max_i]);
                $k=rand(0,99);
                $bid  = $this->domain->dir['adv'].'/'.$type.'.'.$arr[$k].'.'.$banners[0]['type'];
                //echo $bid.'<br>';
                $code = join("", file($bid));
                return $code;


        }
 

Protoss

Guest
Основной геморрой был - чтоб все дробные проценты приплюсовать к баннеру с максимальным числом показов - для этого и сделан 2 цикл.
 
Сверху