以下は、各質問の正解と不正解です。
Question Number: 1 Correct Answer(s) B Incorrect Answers A C D
Question Number: 2 Correct Answer(s) A C Incorrect Answers B D
Question Number: 3 Correct Answer(s) D Incorrect Answers A B C
問題は、複数の回答 (複数の正解) がある質問に対して間違った回答を取得する方法です。質問の正解が 1 つしかない場合に不正解を取得しても問題はなく、正解が複数あるだけです。
以下は、間違った回答が表示される現在の方法と、それがどのように表示されるかを示しています (問題がどこにあるかがわかるように、以下に色分けしました)。
質問に複数の正解がある場合、その質問内ですべての回答をループし、1 つの正解を削除して残りの回答を表示し、すべての回答を再度ループして削除するようです。別の 1 つの正しい答えを表示し、現在の答えの残りを表示します。
したがって、A と C はA
、質問 2 で表示される最初の一連の不正解から削除され、質問 2 でC
2 番目の不正解のセットから削除されたため、正解であると認識されます。質問ごとに各行の不正解。
私の質問は、ディスプレイがどのように見えるように修正するにはどうすればよいですか?
現在の出力のコードは次のとおりです。
<table border='1' id='penaltytbl'>
<thead>
<tr>
<th class='questionth'>Question No.</th>
<th class='answerth'>Incorrect Answer</th></tr>
</thead>
<tbody>
<?php
$row_span = array_count_values($searchQuestionNo);
$q_counter = 1;// counter for $row_span
$i = key($row_span); // gets first question number
foreach ($incorrect_ans as $key => $val){
if($q_counter == 1){
$q_row_span[$i] = count($val);}
else{
$q_row_span[$i] += count($val);}
if($q_counter >= $row_span[$i]){
$q_counter = 1;
$i++;}
else{
$q_counter++; }
}
$prev_ques = '';
foreach($searchQuestionNo as $key=>$questionNo){
?>
<tr class="questiontd">
<?php
if($questionNo != $prev_ques){
?>
<td class="questionnumtd q<?php echo$questionNo?>_qnum" rowspan="<?php echo$q_row_span[$questionNo]?>">
<?php echo$questionNo?><input type="hidden" name="numQuestion" value="<?php echo$questionNo?>" />
</td>
<?php
}
foreach($incorrect_ans[$key] as $answer){ ?>
<td class="answertd"><?php echo$answer?></td>
</tr>
<?php
}
$prev_ques = $questionNo;
}
?>
</tbody>
</table>
以下のコードは、各質問の不正解を取得して配列に格納する方法を示しています。このコードは、上記の HTML テーブルの上に表示されます。
$specialOptionTypes = array('Yes or No' => array( 'Yes', 'No' ),'True or False' => array( 'True', 'False' ));
while ($stmt->fetch()) {
// Do this for each row:
if ( array_key_exists( $dbOptionType, $specialOptionTypes ) ) {
$options = $specialOptionTypes[$dbOptionType];
} else if ( preg_match( '/^([A-Z])-([A-Z])$/', $dbOptionType, $match ) ) {
$options = range( $match[1], $match[2] );
} else {
// issue warning about unrecognized option type
$options = array();
}
$right = str_split( $dbAnswer );
$wrong = array_diff( $options, $right );
$searchQuestionNo[] = $dbQuestionNo;
$incorrect_ans[] = $wrong;
}
アップデート:
列の後に追加の列がある場合Incorrect Answer
、以下のコードはレイアウトを台無しにします:
<tbody>
<?php
foreach($ques_ans as $questionNo => $inc_ans)
{
$q_row_span = count($inc_ans);
?>
<tr class="questiontd">
<td class="questionnumtd q<?php echo $questionNo?>_qnum" rowspan="<?php echo $q_row_span ?>">
<?php echo $questionNo?><input type="hidden" name="numQuestion" value="<?php echo $questionNo?>" />
</td>
<?php
foreach ($inc_ans as $ans)
{
?>
<td class="answertd"><?php echo $ans; ?></td>
<?php
}
?>
<td class="questionnumtd q<?php echo $questionNo?>_qnum" rowspan="<?php echo $q_row_span ?>">
<?php echo $questionNo?><input type="hidden" name="numQuestion" value="<?php echo $questionNo?>" />
</td>
</tr>
<?php
}
?>
</tbody>