PHP中的唯一随机数
我试图在我的页面上显示随机横幅为了做到这一点,我有一个函数,它给我一个随机数,根据我显示横幅的数字,问题是有时我会得到相同的数字,所以当页面刷新时,会显示相同的横幅。我想在每个页面上显示不同的横幅刷新 Im使用以下代码获取随机数:PHP中的唯一随机数,php,random,numbers,unique,Php,Random,Numbers,Unique,我试图在我的页面上显示随机横幅为了做到这一点,我有一个函数,它给我一个随机数,根据我显示横幅的数字,问题是有时我会得到相同的数字,所以当页面刷新时,会显示相同的横幅。我想在每个页面上显示不同的横幅刷新 Im使用以下代码获取随机数: function &UniqueRands($min, $max, $keys){ static $returnme = array(); while(in_array($x = rand($min,$max),$returnme));
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";
}
我做错了什么,我很高兴听到任何其他想法。谢谢。您使用的是哪个版本的PHP?由于4.2
rand()
函数是自动设定种子的,但如果您使用的是较旧的函数,则在调用rand()
函数初始化随机数生成器之前,必须使用srand()
函数。或者,mt_-rand()
可能会有所帮助。mt_-rand[1]可能产生更好(“更随机”)的伪随机数,比较[2]
[1]
[2]
问题是,有时我会得到相同的数字,所以当页面
刷新显示的相同横幅
根据你有多少横幅,这是完全可能的。假设您有4个横幅,连续获得相同两个横幅的几率为1/4
如果您真的不希望同一条横幅在一行中显示两次,那么实际上需要减少随机性,而不是增加随机性。将显示的最后一条横幅存储在cookie或其他内容中,然后在选择要显示的下一条横幅时,确保不显示该横幅
当然,正如CanSpice所说,如果你有4个横幅,而用户看了5页,那么你将不得不多次显示一个横幅。但是使用这种方法,你可以阻止他们至少连续两次看到同一个横幅。我想你的意思是如果($num==1)假设你有
N个
横幅。第N+1次刷新时会发生什么?这听起来像是一个统计错误——掷硬币三次,即使概率为50/50(0.5*.5*.5=.125),你仍有13%的几率得到三个正面或反面。尝试增加$min
和$max
的范围。如果刷新页面,这是一个新请求,因此会生成一个新的随机数,但在请求之间不会保留以前生成的数字。。。为什么你要用&?苹果也有同样的问题。就我个人而言,当涉及到横幅广告时,我会把它放在“真的不重要”下,然后继续。假设4个横幅:两次获得第一名的几率是(1/4)x(1/4),两次获得第二名的几率是(1/4)x(1/4),等等,所以连续两次获得任何横幅的几率是(1/4)x(1/4)+(1/4)x(1/4)+(1/4)x(1/4)或1/4。
if ($num=1){
//display banner 1
}