Laravel控制器中对比表单数组值设置ANSWER_STATUS字段
解决方案
修改后的控制器代码
public function Store_Answer(Request $request) { $questions = $request->Question; $correctAnswers = $request->ANSWER; $studentAnswers = $request->OPTION; if ($questions && is_array($correctAnswers) && is_array($studentAnswers)) { foreach ($questions as $index => $question) { // 对比对应位置的答案,相等设为1,否则0 $status = (isset($correctAnswers[$index]) && isset($studentAnswers[$index]) && $correctAnswers[$index] === $studentAnswers[$index]) ? 1 : 0; $data = new OnlineExminAnswer(); $data->ANSWER_STATUS = $status; $data->question = $question; $data->answer = $studentAnswers[$index] ?? null; // 处理学生答案不存在的异常情况 $data->save(); } } }
关键逻辑说明
- 将请求中的数组变量单独取出,提升代码可读性
- 增加数组合法性判断,避免因数组不存在或非数组类型导致运行报错
- 使用
foreach遍历题目数组,通过循环索引$index匹配对应位置的正确答案与学生答案 - 用三元运算符简化判断逻辑:当对应位置的正确答案和学生答案都存在且严格相等时,
ANSWER_STATUS设为1,否则设为0 - 处理学生答案可能不存在的边界情况,用
?? null避免索引越界报错
内容的提问来源于stack exchange,提问作者user12931578
相关产品推荐
相关产品推荐

