我在这边随机了题目但是他结果的时候也是会随机的44行-46行 请问怎么写结果读取的时候是读取随机的题目
[PHP] 纯文本查看 复制代码 <?php
/**
* User: alpha
* Date: 2017/6/27
* Time: 11:26
* 系统方法定义文件
*/
//计算一个考题总分
function getDataTotal($data){
$sum=0; //考题总分
//从题库中读取考题分数信息
foreach ($data as $v){
$sum += $v['score'];
}
return $sum;
}
//获取题库ID
function getTestId(){
$id=isset($_GET['id']) ? (int)$_GET['id'] :1;
//限制题库的序号最小为1
return max($id,1);
}
//根据题号载入题库
function getDataById($id,$toHTML=true){
//根据题号拼接题库文件路径
$target="./data/$id.php";
//判断题库文件是否存在
if(!file_exists($target)){
return false;
}
$data= require $target;
$func = function ($data) use(&$func){
$result = [];
foreach ($data as $k=>$v){
//如果是数组,则继续递归,如果是字符串,则转义
$result[$k] = is_array($v) ? $func($v) : (is_string($v) ? toHtml($v) : $v);
}
return $result;
};
shuffle($data['data']['binary']['data']);
shuffle($data['data']['single']['data']);
shuffle($data['data']['multiple']['data']);
return $toHTML ? $func($data) : $data;
}
/**
* 获取题库信息 返回每种题型下的试题个数和每种题型中每道题的分数
* [url=home.php?mod=space&uid=952169]@Param[/url] array data 题库
*/
function getDataInfo($data){
$count = []; //保存某种题型的题目数量
$score = []; //每道题的分值
foreach ($data as $k=>$v) {
$count[$k]=count($v['data']);
$score[$k]=round($v['score']/$count[$k]);
}
return [$count,$score]; //使用list()接收返回值:list($count,$score);顺序依次对应
}
//HTML特殊字符转义
function toHtml($str){
$str=htmlspecialchars($str,ENT_QUOTES);
return str_replace(' ',' ',$str);
}
这是得分代码
[PHP] 纯文本查看 复制代码 <?php
/**
* User: alpha
* Date: 2017/6/29
* Time: 9:35
* 考题分数统计
*/
header("Content-type:text/html;charset=utf-8");
require './common/function.php';
$id=getTestId(); //提交考题的序号
$data=getDataById($id,false); //获取考题内容
//判断题库是否存在
if(!$data){
require './view/404.html';
exit;
}
//获取题库信息
list($count,$score)=getDataInfo($data['data']);
//开始阅卷操作
$sum = 0; //保存总得分
$total=[]; //记录考试结果
foreach ($data['data'] as $type=>$each){
foreach ($each['data'] as $k=>$v){
//取出提交的答案
$answer=isset($_POST[$type][$k])?$_POST[$type][$k] : '';
//判断答案是否正确
if($v['answer'] === $answer){
$total[$type][$k] = true;
$sum+=$score[$type];
}else{
$total[$type][$k]=false;
}
}
}
//var_dump($total);
require './view/total.html';
|