Помогите с скриптом (рандом баннеры)

X
На сайте с 11.12.2010
Offline
4
1587

здравствуйте.

есть такой скрипт:

<script language="JavaScript">
<!--

var banners = new Array(
'1',
'2',
'3',
'n');

document.write (banners[Math.floor(Math.random() * banners.length)]);

// -->
</script>

рандомно выводит 1...n, в одном месте

как сделать, чтобы выводило сразу 3 (и больше) штуки на странице

при этом, чтобы не было одинаковых на странице?

например выводит в строчку 2 3 4, перезагрузил страницу, стало 3 1 2

но чтобы не было 3 3 2; 2 1 2 и тп.

и как это организовать? чтобы были в разных местах?

делать по 1 скрипту на каждый блок?

Ragnarok
На сайте с 25.06.2010
Offline
239
#1
xsoulzzz:
здравствуйте.

есть такой скрипт:
<script language="JavaScript">

<!--

var banners = new Array(
'1',
'2',
'3',
'n');

document.write (banners[Math.floor(Math.random() * banners.length)]);

// -->
</script>


рандомно выводит 1...n, в одном месте

как сделать, чтобы выводило сразу 3 (и больше) штуки на странице
при этом, чтобы не было одинаковых на странице?

например выводит в строчку 2 3 4, перезагрузил страницу, стало 3 1 2
но чтобы не было 3 3 2; 2 1 2 и тп.

и как это организовать? чтобы были в разных местах?
делать по 1 скрипту на каждый блок?

ну примерно так же.

алгоритм, я думаю, примерно такой: задаешь массив с номерами. рандомно генерируешь одно число от 0 до размера массива -- выводишь баннер -- исключаешь число с этим порядковым номером из массива -- повторяешь сколько нужно раз.

только выводи не через


document.write

а сделай <div id="id1"></div> (id2,id3 и т.п.) и выводи через


document.getElementById('div1').innerHTML='...
//TODO: перестать откладывать на потом
skAmZ
На сайте с 04.09.2009
Offline
122
#2


<script language="JavaScript">
<!--
function print_next()
{
if(banners.length){
var num=Math.floor(Math.random() * banners.length);
document.write (banners[num]);
banners.splice(num,1);
}
}
var banners = new Array(
'1',
'2',
'3',
'n');
// -->
</script>
..................
<script language="JavaScript">
print_next();
//................
print_next();
//...................
print_next();
//...................
print_next();
</script>
X
На сайте с 11.12.2010
Offline
4
#3

огромное спасибо, skAmZ!

X
На сайте с 11.12.2010
Offline
4
#4

еще вопрос:

как тоже самое, можно сделать, с помощью php?

например, из этого:

<?php

$a = array("1", "2", "3");
echo $a[mt_rand(0,2)];
?>

условия те же:

как сделать, чтобы выводило сразу несколько штук на странице
при этом, чтобы не было одинаковых на странице?

например выводит в строчку 2 3 1, перезагрузил страницу, стало 3 1 2
но чтобы не было 3 3 2; 2 1 2 и тп.

и как это организовать? чтобы были в разных местах?
L
На сайте с 22.06.2008
Offline
44
#5

print_next(); удобно получилось)

можно еще просто перемешать и выводить.

javascript

function arrayShuffle(theArray) {

var len = theArray.length;

var i = len;

while (i--) {

var p = parseInt(Math.random()*len);

var t = theArray;
theArray = theArray[p];
theArray[p] = t;
}
};



php array_shuffle и просто вывод

N
На сайте с 06.05.2007
Offline
419
#6

xsoulzzz, посмотри на openx. там все это и много другое для рекламы уже украдено до вас.

Кнопка вызова админа ()
C
На сайте с 28.01.2010
Offline
70
#7
xsoulzzz:
еще вопрос:

как тоже самое, можно сделать, с помощью php?
например, из этого:
<?php

$a = array("1", "2", "3");
echo $a[mt_rand(0,2)];
?>


$banners = array("1", "2", "3");
$num_banners = 2;
$banner_keys = array_rand($banners, $num_banners);
foreach ($banner_keys as $banner_key) {
echo $banners[$banner_key];
}
Это - личная подпись. Здесь обычно ставят ссылки на всякие кривые сайты, надеясь получить "жирный бек".
E
На сайте с 03.12.2010
Offline
140
#8

$banners = array("1", "2", "3", "4","5");

shuffle($banners);

и потом в нужных местах просто

echo $banners[0];

echo $banners[1];

echo $banners[2];

итд до 4 ( в данном случае). Повторов не будет.

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