2016-03-18 10 views
0

複数のifステートメントの代わりにforループを使用してコードロジックを作成しようとしています。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個程度の文を作成しなければならないからです。私が説明するために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[]; 
     } 
    } 
}; 

を、私は3つの、私はを通じてサイクルにしようとしていますことを関与配列、$postAns$correct、および$incorrectを持っています。 $correct$incorrect配列が呼び出されると、答えが正しいかどうかによってテキストが出力されます。

forループの場合、$postAns配列の各値を確認し、どの答え番号であるか、そして正しい答えかどうかを調べることができます。正しければ、コードは$correctを循環してその回答番号の正しいテキストを取得し、ユーザがどれだけ多くの権利を得たかを格納する変数totalCorrectの値を増やします。間違っている場合、コードは$incorrectを循環して、その回答番号の正しいテキストを取得します。

私は一般的にループに堪能ではないので、どんな洞察力/助けでも大歓迎です。

編集:私は本当にあなたが達成しようとしているのか分からないが、ループは次のようになりますし、あなたがifたりと、いくつかの検証を行うことができますフォームの送信コード

<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

を含まswitch 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

こんにちは、あなたには分かりません。明確にするために、上記のコードには、ラジオボタンを選択し、その値をチェックし(正解かどうか)、$ correctまたは$ incorrectのいずれかを出力するif文が約9個あります。 forループを使用して達成しようとしているのは、ifステートメントを取り除き、直前のコードが行ったいくつかの行と、$ totalCorrectの値をインクリメントすることです。 。私はこれが物事を明確にするのに役立つことを望む – Wolfrum

+0

フォームでhtmlマークアップを表示できますか? – fefe

+0

自分の編集でフォームコードを追加しました。 – Wolfrum

関連する問題