【问题标题】:Multidimensional Array + Foreach多维数组 + Foreach
【发布时间】:2015-03-01 02:34:40
【问题描述】:

我想使用存储在数据库表中的值创建一些在线测验。每个页面将显示十个问题,每个问题后面有四个可能的答案...

What color are apples?
red
yellow
blue
pink

我知道如何制作一个显示所有问题的简单数组。或者我可以显示所有答案。但是将每组答案与适当的答案分组比较棘手。

有人建议我使用结合 foreach 的多维数组。所以我开始查看一些相关的线程,包括@php PDO fetchAll() - while not working, foreach works,但我完全被雪覆盖了。

这就是我目前所想出的......

$Questions = array('question' => $Question, 'answers' => array($Answers));

foreach ($Questions as $Question => $Answers) {
  echo $Questions.'<br />';
 }

但它可能有比我数不清的更多错误。这至少在正确的轨道上吗?

我在下面发布了我的代码。

$stmt = $pdo->prepare("SELECT T.URL, TQ.URL, TQ.QID, TQ.Question, TQ.Feedback, TA.URL, TA.QID QID2, TA.Value, TA.Answer, TA.Correct
FROM g_tests T
LEFT JOIN g_test_questions TQ ON TQ.URL = T.URL
LEFT JOIN g_test_answers TA ON TA.URL = T.URL
WHERE T.URL = 'gw-intro-1' AND TQ.QID = TA.QID
ORDER BY TA.N");
$stmt->execute(array(
'MyURL'=>$MyURL
));

while ($row = $stmt->fetch()) {
    $URL = $row['URL'];
    $QID = $row['QID'];
    $QID2 = $row['QID2'];
    $Question = $row['Question'];
    $Feedback = $row['Feedback'];
    $Value = $row['Value'];
    $Answer = $row['Answer'];
    $Correct = $row['Correct'];
    $Correct = str_replace('1', 'correct', $Correct);
    $Correct = str_replace('2', 'wrong', $Correct);

    $Questions = array('question' => $Question, 'answers' => array($Answers));

    foreach ($Questions as $Question => $Answers) {
        echo $Questions.'<br />';
    }
}

我编辑了这个以显示我修改后的代码:

$stmt = $pdo->prepare("SELECT T.Site, T.Type, T.URL, T.Section, T.URL_Foreign, T.Title, T.Subtitle, T.Parent, T.Live, TQ.URL, TQ.QID, TQ.Question, TQ.Feedback, TA.URL, TA.QID QID2, TA.Value, TA.Answer, TA.Correct
FROM g_tests T
LEFT JOIN g_test_questions TQ ON TQ.URL = T.URL
LEFT JOIN g_test_answers TA ON TA.URL = T.URL
WHERE T.URL = 'gw-intro-1' AND TQ.QID = TA.QID
ORDER BY TA.N");

$stmt->execute(array('MyURL' => $MyURL));

$Array = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach ($Array as $dataset){
 foreach ($dataset as $Column => $Value){
    echo "The column [$Column] contains [$Value] <br> \r\n";
 }
}

【问题讨论】:

  • 我刚刚发现这段代码 - echo $Questions ['question']; - 在循环中插入时多次重复每个问题。当在循环外呼应时,它只是呼应了一个问题。我还不能显示任何答案。

标签: php mysql arrays multidimensional-array


【解决方案1】:

您也可以尝试$stmt-&gt;fetchAll(PDO::FETCH_ASSOC)。这确实直接为您提供了一组数据集。结构如下:

Array ( "datasetNumber" =>
    Array (
        "Row1Name" => "Row1Value",
        "Row2Name" => "Row2Value",
        ...                 
    )
)

你可以循环使用这种数组

foreach ($Array as $dataset){
    foreach ($dataset as $Column => $Value){
        echo "The column [$Column] contains [$Value] \r\n";
    }
}

所以你可以省略

while ($row = $stmt->fetch()) {
    $URL = $row['URL'];
    $QID = $row['QID'];
    $QID2 = $row['QID2'];
    $Question = $row['Question'];
    $Feedback = $row['Feedback'];
    $Value = $row['Value'];
    $Answer = $row['Answer'];
    $Correct = $row['Correct'];
    $Correct = str_replace('1', 'correct', $Correct);
    $Correct = str_replace('2', 'wrong', $Correct);

    $Questions = array('question' => $Question, 'answers' => array($Answers));

    foreach ($Questions as $Question => $Answers) {
         echo $Questions.'<br />';
    }
 }

【讨论】:

  • 谢谢,但我很困惑。我是否应该将查询更改为 $stmt->fetchAll(PDO::FETCH_ASSOC)("SELECT 或 $stmt->fetchAll("SELECT 任何一个都会给我错误消息。
  • 执行语句后,您可以使用“$stmt->fetchAll(PDO::FETCH_ASSOC)”获取它。这应该会给你一个具有所描述结构的数组,你可以使用给定的函数循环。
  • 我明白了。我进行了更改,但仍然无法正常工作。我编辑了我的原始帖子以显示我的新代码。不过,我刚刚意识到我做了一些非常愚蠢的事情。我不应该将我的问题和答案放在单独的数据库表中,而应该将它们全部放在一个表中,以父子关系。
  • 查看我对您问题的编辑版本。 $stmt-&gt;fetchAll(); 函数已经返回一个数组,下面的循环将遍历该数组。如果您有任何问题,请告诉我。
  • 我进行了更改。但是,我现在收到两个错误 - 未定义变量:数组和警告:为 foreach() 提供的参数无效
猜你喜欢
  • 2012-08-14
  • 2013-11-02
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
相关资源
最近更新 更多