如何在Naravel中统计测验正确作答数并逐题校验答案正确性
测验作答校验与统计实现方案
你贴的原始示例代码存在PHP语法问题,数组元素的分隔符需使用逗号而非分号,直接运行会触发解析错误,修正后的基础数组初始化写法如下:
// 从数据库获取的正确答案 $correct_answer = [ 1 => 'A', 2 => 'B' ]; // 用户提交的作答 $user_answer = [ 1 => 'B', 2 => 'B' ];
逐题校验逻辑
遍历标准答案的题目ID,逐题对比用户提交的选项,同时兼容漏答的边界场景,最终输出结构化的逐题校验结果方便前端渲染:
- 校验时优先判断用户是否提交了对应题目的作答,未提交直接判定为错误
- 逐题比对时使用严格相等判断
===,避免类型隐式转换带来的判定误差 - 遍历过程中同步累计答对的题目数量,无需额外二次遍历计算
$question_check_result = []; $correct_count = 0; foreach ($correct_answer as $question_id => $right_option) { // 处理漏答场景 if (!isset($user_answer[$question_id])) { $question_check_result[$question_id] = [ 'is_correct' => false, 'user_choice' => '未作答', 'right_choice' => $right_option ]; continue; } $user_choice = $user_answer[$question_id]; $is_correct = $user_choice === $right_option; // 累计正确数 if ($is_correct) { $correct_count++; } $question_check_result[$question_id] = [ 'is_correct' => $is_correct, 'user_choice' => $user_choice, 'right_choice' => $right_option ]; }
拿到$question_check_result数组后,前端只需要循环渲染,对is_correct为true的项标注对勾、为false的项高亮显示正确答案即可。
正确率统计
基于遍历过程中累计的$correct_count,直接计算正确数和占比即可,同时增加总题数为0的边界判断避免除以零错误:
$total_question = count($correct_answer); // 计算百分比,保留2位小数 $accuracy_rate = $total_question > 0 ? round(($correct_count / $total_question) * 100, 2) : 0;
按照你给的示例数据,最终计算结果为:
- 正确作答数:1
- 总题数:2
- 正确率:50%
内容的提问来源于stack exchange,提问作者Kumo Mit
相关产品推荐
相关产品推荐

