在会话期间保持随机种子

时间:2015-06-12 13:34:32

标签: php random random-seed

背景:如果您为prng播种,它将打印出相同的随机序列。所以,如果我告诉你我使用了种子123而我得到了1,5,2,4。那么,你可以使用种子123并获得1,5,2,4。

在最简单的情况下我想做什么...我制作了一个允许你输入种子的网页。然后,它会显示一个随机数字和一个" next"链接。您单击下一个链接并获取下一个随机数。问题是点击" next"与上一页没有任何关系。因此,它不是基于输入的种子。

我想做的事情,我显然忽略了一些事情,就是在会议期间保持种子。我可以为第一个随机数播种兰特。然后,我需要将更新的种子存储在会话中,以便下次用户显示时我可以使用正确的下一个种子进行调整。与srand相反吗?我不想让兰特播种。我想获得使其在当前状态下开始下一次加载所需的值。

1 个答案:

答案 0 :(得分:0)

您可以通过始终使用生成的最后一个随机数重新初始化srand来解决您的问题。你“混淆”种子,但你仍然有一种可重复的方式来生成随机数。

以下是一些代码:

function getNextRandomNumber()
{
    $mySeed = 0; // a default seed value
    if (isset($_SESSION['seed']))
    {
        // continue our seed serie
        $mySeed = $_SESSION['seed'];
    }
    else if (isset($_GET['seed']))
    {
        // reinitialize the seed serie with a user's value
        $mySeed = $_GET['seed'];
    }
    // reproducable srand value
    srand($mySeed);

    // generate the random number
    $rand = rand();
    // We save the seed
    $_SESSION['seed'] = $rand;

    return $rand;
}