它只显示每行的一个值

时间:2013-01-12 16:59:58

标签: php

我在这里有一个phpfiddle:http://phpfiddle.org/main/code/get-rps

我得到的问题是,在Total Marks列中,它只显示所有问题的所有行中最后一个问题的总分,而不是循环遍历所有总分并显示每个问题的正确总分。我在代码中做错了什么?

以下是代码:

<?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);

$totalMarks = array(
                   3,
                   5,
                   5,
                   2);

$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_values(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
        }
    }
}
?>
<table border='1' id='penaltytbl'>
<thead>
<tr>
<th class='questionnoth'>Question No.</th>
<th class='answerth'>Incorrect Answer</th>
<th class='marksth'>Total Marks</th>
</tr>
</thead>
<tbody>
<?php

foreach($ques_ans as $questionNo => $inc_ans)
{
    $q_row_span = count($inc_ans);
    $row_count = 0;
    ?>
    <tr class="questiontd">

        <!-- Question No -->
        <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>

        <!-- first incorrect ans -->
        <td class="answertd"><?php echo $inc_ans[$row_count]; ?></td>

        <!-- Marks -->
       <td class="totalmarkstd" rowspan="<?php echo$q_row_span?>"><?php echo$totalMarks[$key]?></td>
    </tr>
    <?php
        //remaining incorrect answers in separate row (if any) follows here
    if($row_count < $q_row_span - 1) 
    {
        for($i=($row_count + 1); $i<$q_row_span; $i++) { ?>     
            <tr><td class="answertd"><?php echo $inc_ans[$i]; ?></td></tr>
    <?php
        }
    }
}
?>
</tbody>
</table>

1 个答案:

答案 0 :(得分:0)

这一行是你的问题。

<?php echo$totalMarks[$key]?>

$ key是从你的循环中设置的,并且永远不会在底部循环中重置,所以它仍然具有该循环的最后一个值。我假设它应该是<?php echo$totalMarks[$questionNo]?>