2016-03-18 24 views
0

我試圖通過使用for循環而不是多個if語句來創建代碼邏輯。創建使用for循環遍歷多個陣列的代碼邏輯

這是我用以前的if語句代碼之前:

if (isset($_POST['answer1'])) 
{ 
    if ($_POST['answer1'] === '1d') 
    { 
     print $correct[0]; 
    } 
    elseif ($_POST['answer1'] === '1b') 
    { 
     print $incorrect[0]; 
    } 
    elseif ($_POST['answer1'] ==='1c') 
    { 
     print $incorrect[0]; 
    } 
    elseif ($_POST['answer1'] === '1a') 
    { 
     print $incorrect[0]; 
    } 
}; 

此代碼讓我檢查的答案和打印無論是$correct$incorrect變量。我在這段代碼中遇到的問題是效率很低,因爲我最終不得不創建10個或更多的if語句。

我想出了for循環代碼的實體模型來說明:

$_SESSION["totalCorrect"] = 0; 

if (!isset($_SESSION["totalCorrect"])) 
{ 
    $_SESSION["totalCorrect"] = 0; 
} 
else 
{ 
    $totalCorrect = $_SESSION["totalCorrect"]; 
} 

$postAns = array($_POST['answer1'] as $ans1, $_POST['answer2'] as $ans2, $_POST['answer3'] as $ans3, $_POST['answer4'] as $ans4, $_POST['answer5'] as $ans5, $_POST['answer6'] as $ans6, 
$_POST['answer7'] as $ans7, $_POST['answer8'] as $ans8, $_POST['answer9'] as $ans9, $_POST['answer10'] as $ans10); 

for ($i = 0; $i < count($postAns); i++) 
{ 
    if ($i == $postAns[]) 
    { 
     if ($postAns[] === 'answer') 
     { 
      print $correct[]; 
      $_SESSION["totalCorrect"]++; 
     } 
     else() 
     { 
      print $incorrect[]; 
     } 
    } 
}; 

對於這個代碼,我有涉及三個數組,我通過,$postAns$correct試圖週期,$incorrect 。當被調用時,$correct$incorrect數組根據他們是否得到正確答案打印出文本。

因此,對於for循環,我希望能夠遍歷$postAns數組的每個值來檢查並查看它是哪個答案號以及它是否是正確答案。如果它是正確的,那麼代碼循環通過$correct以獲得該答案編號的正確文本,並增加值totalCorrect,該值存儲多少用戶正確。如果不正確,代碼將循環到$incorrect以獲取該答案編號的正確文本。

我並不精通循環,所以任何見解/幫助將不勝感激。

編輯:包括表單提交代碼

<form action="staff_info.php" method="get" id="q1"> 
<fieldset> 
<legend>Question 1</legend> 
<input type="radio" name="answer1" value="1a" id="1a"><label for="1a"> A. </label> 
<input type="radio" name="answer1" value="1b" id="1b"><label for="1b"> B. </label> 
<input type="radio" name="answer1" value="1c" id="1c"><label for="1c"> C. </label> 
<input type="radio" name="answer1" value="1d" id="1d"><label for="1d"> D. </label> 
<input type="button" id="answer" class="button " title="abutton" value="ANSWER"> 
<a href="staff_q2.php" class="button " title="nbutton" style="float:right;" id="next">NEXT</a> 
</fieldset> 

回答

0

你在僞代碼中遺漏的一件事是實際答案。如果你創建一個正確的答案陣列@fefe指示然後循環將是這樣的:

$correctAnswers = array(
    'answer1'=>'1d', 
    'answer2' => '2b', 
    'answer3' => '3c', 
    'answer4' => '4b', 
    'answer5' => '5a' 
); 

$numberCorrect = 0; 
$responseIndex = 0; 

foreach ($correctAnswers as $key=>$answer) { 
    if ($_POST[$key] === $answer) { 
     $numberCorrect++; 
     print $correct[$responseIndex]; 
    } 
    else { 
     print $incorrect[$responseIndex]; 
    } 

    $responseIndex++; 
} 
+0

嗨,對於遲到的回覆表示歉意,但是這段代碼與一些調整一起工作。我在if語句之外移動了$ responseIndex,因爲它輸出的是全部文本,而不是正確的文本,但是代碼的一般想法非常有用。 – Wolfrum

0

我真的不知道你想達到什麼目的,但環應該是這個樣子,你可以做一些驗證與ifswitch case

$postAns = array(
    'answer1'=>'ans1', 
    'answer2' => 'ans2', 
    'answer3' => 'ans3', 
    'answer4' => 'ans4', 
    'answer5' => 'ans5', 
    'answer6' => 'ans6', 
    'answer7' => 'ans7', 
    'answer8' => 'ans8', 
    'answer9' => 'ans9', 
    'answer10' => 'ans9' 
); 


foreach ($postAns as $key=>$ans) { 
    var_dump($ans); 
} 
+0

嗨,我很抱歉,如果它似乎不清楚給你。爲了澄清,上面顯示的代碼有大約九個其他的if語句允許我選擇一個單選按鈕,檢查它的值(是否是正確答案),然後打印$ correct或$ incorrect。我試圖通過使用for循環來實現的是擺脫if語句,並恰好用幾行代碼完成前面的代碼,並增加$ totalCorrect的值,以前的代碼沒有這樣做。我希望這有助於澄清事情。 – Wolfrum

+0

你能告訴我一些表格的html標記嗎? – fefe

+0

我用我的編輯添加了表單代碼。 – Wolfrum