PHP中的唯一随机数

时间:2012-01-04 22:10:44

标签: php random numbers unique

我试图在我的页面上显示随机横幅来执行此操作我有一个函数,它给我一个随机数字,并根据数字我显示横幅问题是,有时我得到相同的数字,所以当页面刷新显示相同的横幅。我想在每页刷新时显示不同的横幅。

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

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 个答案:

答案 0 :(得分:2)

  

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

根据您拥有的横幅数量,这是完全可能的。假设您有4个横幅,连续获得两个横幅的几率是1/4。

如果你真的不希望连续两次显示相同的横幅,你实际上需要减少随机而不是更多。存储cookie或其他内容中显示的最后一个横幅,然后在选择要显示的下一个横幅时确保不显示该横幅。

当然,正如CanSpice所说,如果你有4个横幅并且用户看了5页,那么你将不得不多次展示一个横幅。但是使用这种方法,你可以阻止他们至少连续两次看到同一个横幅。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

据推测,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/