PHP问答题计算收音机和复选框

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

我有一个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 => '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);
}