【问题标题】:Need array within an array (I think)需要数组中的数组(我认为)
【发布时间】:2015-03-01 01:33:43
【问题描述】:

我正在尝试做一个由 PHP、jQuery、AJAX 和数据库驱动的测验。但我在第一方被难住了。

一个典型的测验由十个问题组成,每个问题后面有四个可能的答案 - 都在一页上。 HTML 可能看起来很像这样:

<div class="OuterWrapper">  
  <div class="question"><b>No one knows if there&#8217;s just one universe or a series of universes, commonly referred to as a:</b></div>
    <ul class="answers">
      <li class="Answer correct"><label><input data-key="A" type="radio">multiverse</label></li>
      <li class="Answer wrong"><label><input data-key="B" type="radio">parallel universe</label></li>
      <li class="Answer wrong"><label><input data-key="C" type="radio">constellation</label></li>
      <li class="Answer wrong"><label><input data-key="D" type="radio">black hole</label>     </li>
    </ul>
</div><!-- OuterWrapper -->

<div class="OuterWrapper">
  <div class="question"><b>Scientists believe the universe is:</b></div>
    <ul class="answers">
      <li class="Answer wrong"><label><input data-key="A" type="radio">shrinking</label></li>
      <li class="Answer correct"><label><input data-key="B" type="radio">expanding</label></li>
      <li class="Answer wrong"><label><input data-key="C" type="radio">in a state of equilibrium</label></li>
      <li class="Answer wrong"><label><input data-key="D" type="radio">becoming bipolar</label></li>
    </ul>
</div><!-- OuterWrapper -->

显示的 PHP 代码如下所示:

<div class="OuterWrapper">
  <div class="question"><b>'.$Question.'</b></div>
    <ul>
      <li class="Answer '.$Correct.'"><label><input data-key="'.$Value.'" type="radio">'.$Answer.'</label></li>
    </ul>
  </div>
</div>

我知道如何创建一个显示所有十个问题的数组。或者我可以创建一个显示所有答案的数组。但是,我不知道如何将两者结合起来,以便每个问题后面都有与该问题相关的四个答案。

我假设我必须以某种方式将我的 $Answers 数组放入 $Questions 数组中?

echo join ($Questions, '').join ($Answers, '');

起初我放弃了,只是做了一个常规查询,但这是一场噩梦 - 各种样式/语法问题。

无论如何,谁能告诉我如何创建我上面描述的数组?或者,如果这种类型的数组有一个名称,那么只要知道这个名称就可以帮助我在 Google 上获得提示。

下面是一些更完整的代码,尽管它仍然非常精简。

$MyURL = 'gw-intro-1';

$stmt = $pdo->prepare("SELECT T.URL, TQ.QID, TQ.Question, 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
));

$Q1 = null;

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

 // Some aborted attempts at making arrays...
 $Questions[] = '<div class="question"><b>'.$Question.'</b></div>';
 $Answers[] = '<li class="Answer '.$Correct.'"><label><input data-key="'.$Value.'"    type="radio">'.$Answer.'</label></li>';
}

【问题讨论】:

  • 我不建议在您的 html 中使用 wrong/correct 类。用户可以轻松查看源代码并找到正确答案。
  • 是的,一旦我启动并运行了这个东西,我就想做这件事。我想我可以在用户单击提交按钮后使用 AJAX 或 jQuery 插入“正确”和“错误”类。
  • 我的想法是创建一个多维数组 -> $Questions[] = array('question'=&gt; $Question, 'answers'=&gt; array($Answer1,$Answer2,$Answer3,$Answer4));。然后你可以做一个 foreach 循环 -foreach($Questions as $Question){ echo $Question['question']; foreach($Question['answer'] as $Answer){ echo $Answer; } } 来显示结果(问题的外循环和答案的内循环)

标签: php mysql arrays


【解决方案1】:

通过传递一个值数组来执行准备好的语句

$stmt = $pdo->prepare("SELECT T.URL, TQ.QID, TQ.Question, 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 = :MyURL AND TQ.QID = TA.QID
ORDER BY TA.N
");

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

如果您期望超过 1 行,请使用

PDOStatement::fetchAll

【讨论】:

  • 这是一种正确/良好的做法,但没有回答 OP 关于如何创建/显示问题/答案数组的实际问题。
  • @ fortune - 很抱歉,但我不关注。看起来你说我的查询没问题...但是我不需要在 While 循环中做一些不同的事情来使问题和答案以正确的顺序显示,还是我错过了什么?
  • 我应该知道怎么做;我想我在显示动物列表时做过类似的事情 - 顺序,然后是家庭,每个家庭后跟该家庭中的物种列表。不过,我现在不记得我是怎么做到的了。
  • @DavidBlomstrom 我正在讲述使用 Prepare an SQL statement with named parameters -> php.net/manual/en/pdo.prepare.php
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
相关资源
最近更新 更多