黑马程序员技术交流社区

标题: [求助] PHP随机函数 [打印本页]

作者: yinyax    时间: 2020-12-9 09:10
标题: [求助] PHP随机函数
我在这边随机了题目但是他结果的时候也是会随机的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;
}

/**
* 获取题库信息  返回每种题型下的试题个数和每种题型中每道题的分数
* @Param 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';






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2