PHP问答题计算收音机和复选框
我有一个html测验,答案是单选按钮和复选框格式 用户必须正确回答问题的所有部分,才能获得满分,不得分 我的测验有25个问题 html测验的简化版本如下(仅显示4个问题)PHP问答题计算收音机和复选框,php,html,arrays,Php,Html,Arrays,我有一个html测验,答案是单选按钮和复选框格式 用户必须正确回答问题的所有部分,才能获得满分,不得分 我的测验有25个问题 html测验的简化版本如下(仅显示4个问题) var\u dump($\u POST)的结果如下: array ( 'form' => array ( '1-1' => '1', '1-2' => '3', '1-3' => '3', '1-4' => array ( 0 =&g
var\u dump($\u POST)
的结果如下:
array (
'form' =>
array (
'1-1' => '1',
'1-2' => '3',
'1-3' => '3',
'1-4' =>
array (
0 => '1',
1 => '2',
),
'1-5' =>
array (
0 => '3',
),
'1-6' =>
array (
0 => '1',
1 => '4',
2 => '6',
),
'1-7' =>
array (
0 => '2',
),
'1-8' =>
array (
0 => '1',
1 => '2',
),
'1-9' =>
array (
0 => '2',
),
'1-10' =>
array (
0 => '1',
),
'1-11' =>
array (
0 => '1',
),
'1-12' =>
array (
0 => '3',
),
'1-13' =>
array (
0 => '1',
1 => '3',
),
'1-14' =>
array (
0 => '2',
),
'1-15' =>
array (
0 => '1',
),
'1-16' =>
array (
0 => '1',
),
'1-17' =>
array (
0 => '2',
1 => '3',
),
'1-18' =>
array (
0 => '2',
),
'1-19' =>
array (
0 => '2',
),
'1-20' =>
array (
0 => '2',
),
'1-21' =>
array (
0 => '2',
),
'1-22' =>
array (
0 => '3',
),
'1-23' =>
array (
0 => '3',
),
'1-24' =>
array (
0 => '3',
),
'1-25' =>
array (
0 => '2',
),
'total' => 30,
),
)
我已经正确回答了前十个问题(请参阅我的数组答案与数组答案1-1到1-10匹配),但是总数只有30个,我应该在前十个正确答案中至少获得50分
看起来脚本并没有计算数字4、6和8这样的多答案问题。我不知道为什么
我的代码是否不正确,或者我是否应该以某种方式对其进行更改以实现我想要的功能?由于似乎存在多选择或非多选择的问题,此解决方案会将所有内容转换为数组,然后检查答案是否与解决方案相同 $total=0
foreach ( $solutions as $question => $solution ) {
$userAnswer = $_POST['form'][$question] ?? null;
$solution = is_array($solution) ? $solution : [$solution];
$userAnswer = is_array($userAnswer) ? $userAnswer : [$userAnswer];
$total += ($userAnswer == $solution);
}
根据您的$u POST数组,1-5之后的所有内容都将作为数组返回(即使只有一个答案)。因此,他们将被捕获。不知道这是否是解决方案,但它肯定会影响结果?它将在html中。对于您的复选框,因为您要求的答案不止一个,所以您添加了
[]
。如果第4季度下面的问题中也有[]
,则可以看到此输出。但我大量假设,因为我们看不到第四季度过去。只有复选框q应该有额外的[]
…在您的答案中,一些看起来不应该是多选的问题具有用于用户答案的数组。例如,对于'1-5'=>3、
和'1-5'=>数组(0=>'3',)的用户输入,这是完美的-谢谢!你能解释一下我哪里出错了吗?我在评论中说过,有些非多选选项似乎给出了数组作为答案,这有点奇怪<例如,代码>'1-5'
。但是,由于您只需要完全匹配,因此可以很容易地将所有内容转换为多项选择,然后比较结果。
array (
'form' =>
array (
'1-1' => '1',
'1-2' => '3',
'1-3' => '3',
'1-4' =>
array (
0 => '1',
1 => '2',
),
'1-5' =>
array (
0 => '3',
),
'1-6' =>
array (
0 => '1',
1 => '4',
2 => '6',
),
'1-7' =>
array (
0 => '2',
),
'1-8' =>
array (
0 => '1',
1 => '2',
),
'1-9' =>
array (
0 => '2',
),
'1-10' =>
array (
0 => '1',
),
'1-11' =>
array (
0 => '1',
),
'1-12' =>
array (
0 => '3',
),
'1-13' =>
array (
0 => '1',
1 => '3',
),
'1-14' =>
array (
0 => '2',
),
'1-15' =>
array (
0 => '1',
),
'1-16' =>
array (
0 => '1',
),
'1-17' =>
array (
0 => '2',
1 => '3',
),
'1-18' =>
array (
0 => '2',
),
'1-19' =>
array (
0 => '2',
),
'1-20' =>
array (
0 => '2',
),
'1-21' =>
array (
0 => '2',
),
'1-22' =>
array (
0 => '3',
),
'1-23' =>
array (
0 => '3',
),
'1-24' =>
array (
0 => '3',
),
'1-25' =>
array (
0 => '2',
),
'total' => 30,
),
)
foreach ( $solutions as $question => $solution ) {
$userAnswer = $_POST['form'][$question] ?? null;
$solution = is_array($solution) ? $solution : [$solution];
$userAnswer = is_array($userAnswer) ? $userAnswer : [$userAnswer];
$total += ($userAnswer == $solution);
}