2012-01-04 91 views
1

我试图在我的页面上显示随机横幅来做到这一点我有一个函数,它给了我一个随机数,并根据数字显示横幅问题是有时我得到相同的数字所以当页面刷新时显示相同的横幅。我想在每个页面刷新显示不同的横幅。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 
} 

...

我在做什么错了,我很乐意听到任何其他想法。谢谢。

+1

我想你的意思是'if($ num === 1)' – Paulpro 2012-01-04 22:13:38

+1

假设你有'N'个横幅。在第N + 1次刷新时会发生什么? – CanSpice 2012-01-04 22:13:46

+2

这听起来像是一个统计错误 - 抛硬币三次,尽管它有50/50的概率(.5 * .5 *),但仍有13%的机会会连续得到三个正面或反面的尾部。 5 = .125)。尝试增加'$ min'和'$ max'的范围。 – buley 2012-01-04 22:16:39

回答

0

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

2

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

根据你有多少个横幅,这是完全可能的。假设你有4个横幅,连续获得相同两个横幅的机会是1/4。

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

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

+1

苹果有完全相同的问题。 http://www.whatdidyoulearntoday.co.uk/post/6692906219/the-ipod-shuffle-feature-was-made-less-random-in-order-t个人而言,当涉及横幅广告时,我会提交此文件在“真正不重要”之下,继续前进。 – James 2012-01-04 22:23:54

+0

假设4个横幅:两次获得第一次的机会是(1/4)x(1/4),两次获得第二次的机会是(1/4)x(1/4)等,所以(1/4)×(1/4)+(1/4)×(1/4)+(1/4)×(1/4)+(1/4)× (1/4)或1/4。 – James 2012-01-04 22:28:39