PHP中唯一的随机数


Unique random numbers in PHP

我试图在我的页面上显示随机横幅做到这一点,我有一个功能,它给了我一个随机数,并取决于数字我显示横幅的问题是,有时我得到相同的数字,所以当页面刷新时显示相同的横幅。我想在每次页面刷新时显示不同的横幅。

我使用以下代码来获取随机数:

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
}

我做错了什么,我很高兴听到任何其他的想法。谢谢。

的问题是,有时我得到相同的数字所以当页面刷新显示相同的横幅

这完全有可能取决于你有多少个横幅。假设你有4个横幅广告,连续得到相同两个的机会是1/4。

如果你真的不希望同一条横幅在一行中显示两次,你实际上需要减少它的随机性而不是增加它的随机性。将最后一个显示的横幅存储在cookie或其他东西中,然后在选择要显示的下一个横幅时确保不显示那个。

当然,正如CanSpice所说,如果你有4个横幅广告,而用户看了5个页面,那么你将不得不多次显示一个横幅广告。但是使用这种方法,你可以阻止他们在一行中至少看到两次相同的横幅。

您使用的是哪个版本的PHP ?由于4.2的rand()函数是自动播种的,但如果你使用的是旧的,你必须在调用rand()函数之前使用srand()函数来初始化随机数生成器。或者mt_rand()会有帮助。

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/