php rand不重复相同的数字

时间:2013-07-29 09:08:37

标签: php random

我有rand功能的问题,我看到每次重新加载网站repit在很多情况下相同的数字我把我的示例脚本继续:

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

在许多情况下,此脚本的结果可以是这个和正确的,(1,4,5)或在其他情况下有这个问题(1,2,2)或(2,3,2)(重新编写随机数) )

在许多情况下,重新输入一个数字,此结果会重新播放一张图片或一个视频而不会显示所有不同的结果

感谢问候

2 个答案:

答案 0 :(得分:2)

在您的情况下,准备一个包含0到6之间数字的数组并将其随机播放:

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

另一种选择是存储已生成的值列表并使用拒绝采样,即再次尝试,直到找到列表中尚未存在的值。使用哪种方法(将预先制作的列表混洗并返回它或其子列表或拒绝采样)主要取决于允许的数字范围和要返回的项目数。如果你必须从(0,6)生成7个唯一数字,就像你的情况一样,那么洗牌几乎总是正确的选择。另一方面,如果你必须从(0,10 20 )中得到三个唯一数字,那么权衡看起来会有很大不同。

答案 1 :(得分: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;
}