2013-01-12 55 views
0

因此,可以說下面是每個問題的正確和不正確的答案:如何通過組答案循環一次,並且只顯示不正確的答案

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 

問題是我retreiving一個不正確的答案的方式問題有多個答案(多個正確答案)。在問題只有一個正確答案的情況下檢索不正確的答案沒有任何問題,只是多個正確的答案。

下面顯示的顯示不正確的答案,目前的方式,它應該看起來像這樣(我的色彩以下編碼,所以你可以看到那裏的問題):

enter image description here

如果有多個正確在一個問題中的回答,它似乎就像它在這個問題中所做的那樣,它只是遍歷所有的答案,刪除一個正確的答案,並顯示其餘的答案,然後它遍歷所有的答案,並刪除另一個正確的答案和顯示當前答案的其餘部分。

所以它承認A和C是正確答案,因爲它從第一組會顯示在問題2不正確的答案的去除A和從第二組不正確的答案的問題2.刪除C但是就像我說這是不正確顯示,它應該在每個問題的每一行顯示一個不正確的答案。

我的問題是如何修復顯示以匹配應該看起來像什麼?

當前輸出的代碼是這樣的:

<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; 
     } 

UPDATE:

如果後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> 
+1

告訴我們在哪兒定義'$ incorrect_ans'。 –

+0

你的$ incorrect_ans數組結構如何?像這樣? {1 => {'A','C','D'},2 => {'B','D'},3 => {'A','B','D'}? – JLRishe

+1

@AustinBrunkhorst $ incorrect_ans在表格上方定義爲一個數組,我包含一個更新,顯示如何檢索不正確答案的代碼以及如何刪除每個問題的正確答案,然後將其存儲在數組中 – user1830984

回答

1

這裏正是你想要你的輸出成爲像

<?php 
$incorrect_ans = array(
        array('A','C','D'), 
        array('B','C','D'), 
        array('A','B','D'), 
        array('A','B','C')); 

$searchQuestionNo = array(
        1, 
        2, 
        2, 
        3); 

$ques_ans = array(); //to store incorrect answers against ques no. 

$q_occ_count = array_count_values($searchQuestionNo); 
foreach($searchQuestionNo as $key => $questionNo) 
{ 
    if (! array_key_exists($questionNo, $ques_ans)) 
    { 
     if($q_occ_count[$questionNo] === 1) //if a ques has only one correct ans 
     { 
      $ques_ans[$questionNo] = $incorrect_ans[$key]; //store the array of incorrect ans against the ques no as key 
     } 
     else //if a ques has more than 1 correct ans 
     { 
      //find the intersection of incorrect_ans arrays for this ques 
      $q_keys = array_keys($searchQuestionNo, $questionNo); 
      $q_incorrect_ans = $incorrect_ans[$q_keys[0]]; 
      foreach($q_keys as $q_key) { 
       $q_incorrect_ans = array_intersect($q_incorrect_ans, $incorrect_ans[$q_key]); 
      }  
      $ques_ans[$questionNo] = $q_incorrect_ans; //store the array of incorrect ans against the ques no as key 
     } 
    } 
} 
var_dump($ques_ans); 
?> 
<table border='1' id='penaltytbl'> 
<thead> 
<tr> 
<th class='questionth'>Question No.</th> 
<th class='answerth'>Incorrect Answer</th></tr> 
</thead> 
<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> 
     </tr> 
     <?php 
     } 
} 
?> 
</tbody> 
</table> 

Demo

上面的代碼工作,即使你有3更正一下回答

更新

這裏不添加代碼,只需做一些修改 updated Demo

+0

只是爲了讓我不再問這個問題,我只是有一個小問題,可以說我的表和附加列就像QuestionNo列它必須是rowspan,那麼我該如何修復佈局,以便它可以在「錯誤答案」列旁邊正確添加該列。這是因爲你foreach循環檢查答案行完成錶行後,但此列不會是最後一列。我在包含更新底部的問題 – user1830984

+0

添加了對我的文章的更新 – Uttara

0

這不行嗎?

foreach($searchQuestionNo as $key => $qNum) 
{ 
    $answers = $incorrect_ans[$key]; 
    $aCount = count($answers); 
    $i = 0; 
    foreach($answers as $answer) 
    { 
     echo '<tr>'; 
     if($i == 0) 
     { 
      echo "<td class='questionnumtd q{$qNum}_qnum' rowspan='$aCount'>$qNum"; 
      echo "<input type='hidden' name='numQuestion' value='$qNum' />"; 
      echo "</td>"; 
     } 
     echo "<td class='answertd'>$answer</td>"; 
     echo "</tr>"; 
     $i++; 
    } 
} 

例子:http://ideone.com/7asOjm

+0

這還沒有完全做到這一點,我在我的問題中包含了一個更新2,它顯示了表的結果截圖,所以你可以看到輸出和'var_dump($ answers [ i]);' – user1830984

+0

我已經對$ incorrect_ans [$ key]中的不規則索引進行了修改。你現在可以試試嗎? – JLRishe

+0

@JL我更新了更新2,現在顯示結果,它仍然沒有顯示正確的顯示。說實話,我認爲我的表格佈局是正確的,因爲它只顯示每個問題一次的問題編號,我認爲這個問題可能是我從一個有多個答案的問題收集答案的方式。我認爲我的分隔正確和錯誤答案的功能是這樣做的,即如果有多個答案,它將顯示所有答案,刪除一個答案,然後它將再次顯示所有答案,但這次刪除另一個正確答案 – user1830984