2015-01-02 129 views
0

我想使用存儲在數據庫表中的值創建一些在線測驗。每個頁面將顯示10個問題,每個問題後面四個可能的答案......多維數組+ Foreach

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"; 
} 
} 
+0

我才發現,原來這個代碼 - 回聲$問題['問題']; - 在循環內插入多個回答每個問題。當在迴路外迴盪時,它只是迴應一個問題。我還無法顯示任何答案。 –

回答

1

你可以,或者,嘗試$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 />'; 
    } 
} 
+0

謝謝,但我很困惑。我應該改變我的查詢 $ stmt-> fetchAll(PDO :: FETCH_ASSOC)(「SELECT或$ stmt-> fetchAll(」SELECT任何一個給我錯誤消息。 –

+0

執行語句後,您可能會獲取它使用'$ stmt-> fetchAll(PDO :: FETCH_ASSOC)'。這應該給你一個數組與描述的結構,你可以通過給定的函數循環。 – Tacticus

+0

我看到了。我做了更改,但它仍然是沒有工作,我編輯了我原來的帖子來顯示我的新代碼,但我意識到我做了一些非常愚蠢的事情,而不是將我的問題和答案放在單獨的數據庫表中,我應該把它們全部放在一張表中,親子關係 –