2

我的 rand 函数有问题,我每次重新加载网站时都会看到在许多情况下重复相同的数字,我将示例脚本继续:

for($i=0;$i<3;$i++)
{
$a=rand(0,2);
echo $a;
}

这个脚本的结果在很多情况下可能是 this and right , (1,4,5) 或者在其他情况下有这个问题 (1,2,2) 或 (2,3,2) (repit random number)

在许多情况下,重复一个数字,这个结果重复一个图片或一个视频,并且没有显示所有不同的结果

感谢和问候

4

2 回答 2

2

在您的情况下,准备一个包含从 0 到 6 的数字的数组并将其打乱:

$a = range(0, 6);
shuffle($a);
foreach ($a as $x) { echo $x; }

另一种选择是存储已生成值的列表并使用拒绝抽样,即重试直到找到列表中不存在的值。使用哪种方法(洗牌并返回它或它的子列表或拒绝抽样)主要取决于允许的数字范围和要返回的项目数。但是,如果您必须从 (0, 6) 生成 7 个唯一数字,就像您的情况一样,那么改组几乎总是正确的选择。另一方面,如果您必须从 (0, 10 20 ) 中得出三个唯一数字,则权衡看起来非常不同。

于 2013-07-29T09:11:08.320 回答
0

另一种方法是将最后一个随机值存储在会话中,如果数字相等,则重新启动循环:

for($i=0;$i<3;$i++)
{
    $a=rand(0,2);
    if(isset($_SESSION['lastRand']) && $a == $_SESSION['lastRand']) {
        $i = 0;
        continue;
    }
    $_SESSION['lastRand'] = $a;
    echo $a;
}
于 2013-07-29T09:27:59.517 回答