Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的唯一随机数_Php_Random_Numbers_Unique - Fatal编程技术网

PHP中的唯一随机数

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));

我试图在我的页面上显示随机横幅为了做到这一点,我有一个函数,它给我一个随机数,根据我显示横幅的数字,问题是有时我会得到相同的数字,所以当页面刷新时,会显示相同的横幅。我想在每个页面上显示不同的横幅刷新

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

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
}