Уникальные случайные числа в PHP - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь отобразить случайные баннеры на своей странице, чтобы сделать это, у меня есть функция, которая дает мне случайное число, и в зависимости от числа, которое я отображаю баннер, проблема в том, что иногда я получаю одно и то же число, поэтому, когда страница обновляетсяотображается тот же баннер.Я хотел бы отображать разные баннеры на каждом обновлении страницы.

Я использую следующий код для получения случайного числа:

function &UniqueRands($min, $max, $keys){
    static $returnme = array();
    while(in_array($x = rand($min,$max),$returnme));
    $returnme[] = $x;
    if($keys < count($returnme)-1 && $keys < ($max-$min))
        UniqueRands($min, $max, $keys);
    return $returnme;
} 

$rands = &UniqueRands(1, 3, 1);
foreach ($rands as $num) {
  echo "$num\n";
}

и после того, как я получаю случайное число, я просто делаю

if ($num=1){
//display banner 1
}

...

Что я делаю не так, и я был бы рад услышать любые другие идеи.Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 января 2012

проблема в том, что иногда я получаю один и тот же номер, поэтому при обновлении страницы отображается один и тот же баннер

В зависимости от того, сколько у вас баннеров, это вполне возможно.Предположим, у вас есть 4 баннера, шансы получить те же два подряд - 1/4.

Если вы действительно не хотите, чтобы один и тот же баннер отображался дважды подряд, вам действительно нужносделать его менее случайным, а не более.Сохраните последний баннер, показанный в файле cookie, или что-то в этом роде, а затем при выборе следующего баннера, который нужно показать, убедитесь, что он не показан.

Конечно, как говорит CanSpice, если у вас 4 баннера и пользователь смотритна 5 страницах вам придется показывать один баннер более одного раза.Но, используя этот метод, вы можете остановить их, видя один и тот же баннер дважды, по крайней мере подряд.

0 голосов
/ 05 января 2012

mt_rand [1] предположительно дает лучшие («более случайные») псевдослучайные числа, сравните [2]

[1] http://de.php.net/manual/en/function.mt-rand.php

[2] http://tjl.co/blog/code/followup-php-rand-vs-mt_rand/

0 голосов
/ 05 января 2012

Какую версию PHP вы используете? Поскольку функция 4.2 rand() заполняется автоматически, но если вы используете более старую функцию, вы должны использовать функцию srand() перед вызовом функции rand() для инициализации генератора случайных чисел. Или, может быть, mt_rand() поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...