背景:如果您为prng播种,它将打印出相同的随机序列。所以,如果我告诉你我使用了种子123而我得到了1,5,2,4。那么,你可以使用种子123并获得1,5,2,4。
在最简单的情况下我想做什么...我制作了一个允许你输入种子的网页。然后,它会显示一个随机数字和一个" next"链接。您单击下一个链接并获取下一个随机数。问题是点击" next"与上一页没有任何关系。因此,它不是基于输入的种子。
我想做的事情,我显然忽略了一些事情,就是在会议期间保持种子。我可以为第一个随机数播种兰特。然后,我需要将更新的种子存储在会话中,以便下次用户显示时我可以使用正确的下一个种子进行调整。与srand相反吗?我不想让兰特播种。我想获得使其在当前状态下开始下一次加载所需的值。
答案 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;
}