Ротатор банеров с указанием приоритета (пхп)

M
На сайте с 18.05.2009
Offline
108
893

Есть простой ротатор банеров.

<?php
$banners = array ();
// Список ваших баннеров

$banners[] = ''
$banners[] = ''
$banners[] = ''
$banners[] = ''


echo $banners[array_rand ($banners)];
?>

Показ рандомный, хотя можно задавать приоритет, дублируя нужное количество раз нужный банер, но это очень неудобно... Как можно задавать приоритет иначе, например явно указав его (числове относительное значение)? Есть ли простая реализация подобного решения?

чтоб получилось приблизительно следующее

banner1 [5 х показов]

banners2 [10х показов]

$banners [2 х показов]

и тд.

_
На сайте с 24.03.2008
Offline
381
#1

Так и задавайте, в чём проблема-то.

Массив значений-приоритетов, далее "рандом от суммы" и поиск нужного.

10-20 строк. Если конечно у вас не хайлоад.

M
На сайте с 18.05.2009
Offline
108
#2

если бы знал как - не спрашивал бы))

[Удален]
#3

$rand = rand(1,100);

if (($rand => 1) && ($rand <= 50)) {

include 'код баннера 1';

}

elseif (($rand => 51) && ($rand <= 80)) {

include 'код баннера 2';

}

else {

include 'код баннера 3';

}

50% - баннер 1, 30% - баннер 2, остальное (20%) - баннер 3.

_
На сайте с 24.03.2008
Offline
381
#4

Как выше не надо :)

Я добавил на всякий случай :)

http://govnokod.ru/16722

[Удален]
#5

_SP_, Вы сначала бы написали как надо в таком случае, потом хаяли. :)

_
На сайте с 24.03.2008
Offline
381
#6
BrimStone:
_SP_, Вы сначала бы написали как надо в таком случае, потом хаяли. :)

Второе сообщение почитайте.

Это в целом тоже внокод, но существенно лучше будет, в идеале добавить приоритет в уже имеющийся массив.

[Удален]
#7
_SP_:
Второе сообщение почитайте.
Это в целом тоже внокод, но существенно лучше будет, в идеале добавить приоритет в уже имеющийся массив.

Третье сообщение почитайте. Мой говнокод работать будет, а Ваши рассказы о том, что Вы мегагуру - нет. :)

M
На сайте с 18.05.2009
Offline
108
#8
BrimStone:
if (($rand => 1) && ($rand <= 50))

наверное ошибка , не "=> " а ">=".

Так работает, а эдак - нет:)

но все равно - не гибко..Если нужно добавить скажем четвертый банер? то надо весь код править, расставять новые приоритеты, если же диапазон чисел расширить ( 1,100) то сущствующие приоритеты изменятся..

Вот если бы вес напрямую както задавать,чтото типа:

баннер(1)

баннер(5)

баннер(10)

баннер(10)

баннер(0)

siv1987
На сайте с 02.04.2009
Offline
427
#9

Мой говнокод. Приоритет считается попадание в интервалы между баннерами. Чем интервал выше тем приоритет больше.

$banners[] = array('banner1', 1);

$banners[] = array('banner2', 10);

$banners[] = array('banner3', 20);

$banners[] = array('banner4', 80);

$rand = rand(1, 100);

foreach($banners as $banner){

if($rand <= $banner[1]){

echo $banner[0];

break;

}

}

M
На сайте с 18.05.2009
Offline
108
#10
Приоритет считается попадание в интервалы между баннерами. Чем интервал выше тем приоритет больше.

А если $rand от 80 до 100? (видимо ничего, т.е. пустое место)

Как я понял, например, при таком раскладе вес у всех банеров равный

<?php
$banners[] = array('banner1', 25);
$banners[] = array('banner2', 50);
$banners[] = array('banner3', 75);
$banners[] = array('banner4', 100);

$rand = rand(1, 100);
foreach($banners as $banner){
if($rand <= $banner[1]){
echo $banner[0];
break;
}
} ?>

Спасибо! (но все равно гибкость страдает, по быстрому не добавишь сразу пару банеров или не удалишь парочку, так как фрагменты кода взаимозависимы, нужно учитывать это, править весь код....нет бы сразу накидать с готовыми весами без привязки друг к другу и к диапазону $rand..эх, мечты-мечты)))

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий