我有rand功能的问题,我看到每次重新加载网站repit在很多情况下相同的数字我把我的示例脚本继续:
for($i=0;$i<3;$i++)
{
$a=rand(0,2);
echo $a;
}
在许多情况下,此脚本的结果可以是这个和正确的,(1,4,5)或在其他情况下有这个问题(1,2,2)或(2,3,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;
}