我在一个可以向用户显示随机问题的游戏中工作,所有工作进展顺利,但问题是同一个用户有可能在同一个会话中获得相同的问题,我不想要它,这是我的代码
$runs = $_REQUEST['runs'];
$query = "SELECT max(id) FROM question$runs";
$result1 = db_execute($query);
$ans = mysql_fetch_array($result1);
$max = $ans['0'];
$rand_no = mt_rand(0,$max);
$query1 = "SELECT * FROM question$runs WHERE id='$rand_no'";
现在我如何在同一会话中避免来自同一用户的同一问题 任何想法?PLZ分享比Q全部
答案 0 :(得分:3)
创建一个包含先前问题ID的数组,并将其存储到$ _SESSION中。 生成新的随机数时检查它是否已存在。如果这样重新生成随机数
答案 1 :(得分:3)
正如Voooza所说,商店在会议中提出问题。这样的事情可以解决问题:
session_start();
$runs = $_REQUEST['runs'];
$query = "SELECT max(id) FROM question$runs";
$result1 = db_execute($query);
$ans = mysql_fetch_array($result1);
$max = $ans['0'];
$valid_question = false;
while (!$valid_question) {
$rand_no = mt_rand(0,$max);
if (!in_array($rand_no, $_SESSION['questions'])) {
$valid_question = true;
}
}
$_SESSION['questions'][] = $rand_no;
$query1 = "SELECT * FROM question$runs WHERE id='$rand_no'";
答案 2 :(得分:1)
拥有包含特定问题期间提出的问题的数据结构。每次创建一个容器时,都会向该容器添加新问题;每次检查容器以确保不出现新问题。如果是,请寻找另一个。
答案 3 :(得分:0)
如果内存是一个问题,并且您无法存储每个活动会话应答的每个问题,那么您可以在每个会话中存储一个随机种子,并回答#个问题。对于每个回答的问题,使用shuffle算法(即随机排列)并返回序列中的下一个项目。
[更新]
另一种选择是......如果你不介意每个人都有相同的问题顺序,那么只需为每个问题分配一个随机数,然后按顺序返回,按随机数排序。
答案 4 :(得分:0)
我认为这里不需要会议。
function avoid_random_repeat($r)
$rand = mt_rand(0,$max);
$unique = avoid_random_repeat($rand);
if(in_array($r,$testing)){
$rand_no = mt_rand(0,$max);
avoid_random_repeat($rand_no);
}
else{
array_push($testing,$r);
return;
}
}