将值存储在2d数组中并在PHP中检索

时间:2014-11-10 05:52:38

标签: php arrays

我有一个存储某些部分名称的数组,如a,b,c,每个部分都有类似' a' section包含q1,q2,q3。首先,我从myDB获取这些部分,然后传递这些部分ID以查找问题查询。

每个问题都有分数。现在我想要的是得分为0但有一些适用分数的问题。我一个接一个地想要这些部分和他们的问题。

这段代码工作正常。

见下文

<?php
     $sectionIDs = $obj->getSectionIDs($formatID); //section ID array starting from 225
     $sectionNames = $obj->getSectionNames($formatID);

     for($i=0; $i<count($sectionIDs); $i++)
     {
        $section_name_print_check ="" ;
        $question_ids = $obj->getQuestionID($formatID,$sectionIDs[$i]);
        $questionName = $obj->getQuestionName($formatID,$sectionIDs[$i]);
        for($j=0; $j<count($question_ids); $j++)
        {
           $score_achieved = $obj->getScore_least($question_ids[$j],$formatID,$last_waveID,$received_ID);
           $score_applicable = $obj->getScore_least_applicabe($question_ids[$j],$formatID,$last_waveID,$received_ID);
           if($score_achieved == 0 && $score_applicable != 0)
           {
               if($section_name_print_check == "" )
               {
                   $final_result_arr[$k]["SectionName"] = $sectionNames[$i];
                   $section_name_print_check = $sectionNames[$j];
               }
               $final_result_arr[$k]["QuestionName"] = $questionName[$j];
               $k++;
           }
        }
     }
?>

但是在Retrieval中我遇到了一些问题,例如额外的表行。我怎样才能摆脱这个问题。我每次都得到第二次回音。我想要的是只有在新部分出现时才能得到这个回声。

检索代码:

for($i=0; $i<count($final_result_arr); $i++)
{
   echo '<tr style="background-color:#6F6; font-weight:bold;"><td style="width:700px;" colspan="4">'.$final_result_arr[$i]["SectionName"].'</td></tr>';  
   echo '<tr><td style="width:15px;">Sr.</td><td width="399px"></td><td style="width:143px;" align="center">Achieved Score</td><td style="width:143px;" align="center">Applicable Score</td></tr>';
   echo '<tr><td style="width:15px;">'.++$serial.'</td><td style="width:399px;">'.$final_result_arr[$i]["QuestionName"].'</td><td align="center" style="width:143px;">0%</td><td align="center" style="width:143px;">100%</td></tr>';
   echo '<tr><td colspan="5" style="height:25px;"></td></tr>';  
}

输出是: enter image description here

这里我有额外的表行,而不是逐个部分和问题。 什么可能解决这个问题?我应该将我的数组更改为简单数组还是应该更改我的显示部分?任何帮助!在此先感谢

1 个答案:

答案 0 :(得分:1)

首先,您的检索代码与输出图片不同,因为您的检索代码也会显示每个问题的绿色部分栏。

其次,我建议以不同的方式设置您的阵列。您目前的结构:

array[0] => (
    array[0] => (['SectionName']  = "Skills Evaluation")
    array[1] => (['QuestionName']  = "Did staff offer any other product?")
)
array[1] => (
    array[0] => (['SectionName']  = "Skills Evaluation")
    array[1] => (['QuestionName']  = "Was the conversation closed professionaly?")
)

这意味着每当您对每个部分有多个问题时,您都会多次存储部分名称。您当前的代码假定问题都将正确排序。如果您的数组没有正确排序,您的代码将不会显示每个部分的问题。

你可以选择一个结构,你可以将该部分用作带问题的数组的键。

$final_result_arr['SectionName'][$indexOfQuestion] = "Question";

array['Skills Evaluation'] => (
    array['Skills Evaluation'][0] = "Question"
    array['Skills Evaluation'][1] = "Another question"
)
array['Branch environment'] => (
    array['Branch enviroment'][0] = "Question"
)

使用这样的结构,您可以像这样获取输出:

foreach ($final_result_arr as $section => $questions)
{
    echo '<tr style="background-color:#6F6; font-weight:bold;"><td style="width:700px;" colspan="4">'.$section.'</td></tr>';  
    echo '<tr><td style="width:15px;">Sr.</td><td width="399px"></td><td style="width:143px;" align="center">Achieved Score</td><td style="width:143px;" align="center">Applicable Score</td></tr>';
    foreach ($questions as $question)
    {
        echo '<tr><td style="width:15px;">'.++$serial.'</td><td style="width:399px;">'.$question.'</td><td align="center" style="width:143px;">0%</td><td align="center" style="width:143px;">100%</td></tr>';
        echo '<tr><td colspan="5" style="height:25px;"></td></tr>';  
    }
}

你显然必须调整你的代码来填充数组,如果你想要存储已实现的和适用的分数,你可以改为将$ question一个数组并让它存储这些值。

填满阵列:

if($score_achieved == 0 && $score_applicable != 0)
{
    $final_result_arr[$sectionName[$i]][] = $questionName[$j];
}

或者,如果你想要分数:

if($score_achieved == 0 && $score_applicable != 0)
{
    $final_result_arr[$sectionName[$i]][] = array($questionName[$j], 'score', 'score');
}