php - PHP随机数不重复
问题描述
似乎是重复的标题,但我访问了所有链接,但没有一个页面对我有帮助。
我有以下代码:
//Check if form was submitted
if($_POST){
$number = $_POST['number'];
$selected_choice = $_POST['choice'];
$next=$number+1;
$total=4;
//Get total number of questions
$query="SELECT * FROM `questions` LIMIT 4";
$results = $mysqli->query($query) or die($mysqli->error.__LINE__);
$total=$results->num_rows;
//Get correct choice
$q = "select * from `choices` where question_number = $number and is_correct=1";
$result = $mysqli->query($q) or die($mysqli->error.__LINE__);
$row = $result->fetch_assoc();
$correct_choice=$row['id'];
//compare answer with result
if($correct_choice == $selected_choice){
$_SESSION['score']++;
}
if($number == $total){
header("Location: final.php");
exit();
} else {
header("Location: formular1.php?n=".$next."&score=".$_SESSION['score']);
}
}
我需要做的是在提交表单时获取一个随机数,但该数字必须是唯一的,并且在会话结束之前不要重复。
我努力了:
$number = range(1, 99);
shuffle($number);
..但我不知道如何整合:(谢谢!
解决方案
您对洗牌数组的想法很好,只需将其存储在会话变量中即可:
session_start();
if (!isset($_SESSION["numbers"]) || !count($_SESSION["numbers"])) {
$_SESSION["numbers"] = range(1, 99);
shuffle($_SESSION["numbers"]);
}
$next = array_pop($_SESSION["numbers"]);
推荐阅读
- php - 如何更改下拉菜单以在单击而不是悬停时打开?
- r - 在R中cbind tibble和matrix时不一致
- angular - 隐藏登录组件的标题
- java - 创建数据库后的休眠更新索引或约束
- javascript - 在 xAxis 和 svg 线 D3 之间添加空间
- security - 是否需要强制新注册的用户登录?
- git - Gitignore 所有不匹配的特定模式
- mysql - 从 varchar 转换为 long
- r - `colnames<-`(`*tmp*`, value = `*vtmp*`) 中的错误:尝试在小于二维的对象上设置 'colnames'
- c# - Azure Function App Web API 的 .Net Core MSAL 身份验证