我想使用存储在数据库表中的值创建一些在线测验。每个页面将显示十个问题,每个问题后跟四个可能的答案......
What color are apples?
red
yellow
blue
pink
我知道如何制作一个简单的数组来显示所有问题。或者我可以显示所有答案。但是,将每组答案与适当的答案分组更为棘手。
有人建议我使用与foreach组合的多维数组。所以我开始检查一些相关的线程,包括一个@ php PDO fetchAll() - 虽然不起作用,但foreach工作,但我完全下雪了。
这就是我到目前为止想出的...
$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";
}
}
您也可以
尝试$stmt->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 />';
}
}