2016-03-18 7 views
0

Ich versuche, eine Codelogik zu erstellen, indem Sie eine for Schleife anstelle von mehreren if Anweisungen verwenden.Erstellen von Codelogik, die eine for-Schleife verwendet, um durch mehrere Arrays zu durchlaufen

Dies ist die vorherige if Anweisung Code habe ich vor:

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]; 
    } 
}; 

Dieser Code mich für die Antwort und Druck entweder die $correct oder $incorrect Variable prüfen können. Mein Problem in diesem Code ist, dass es sehr ineffizient ist, weil ich am Ende zehn oder so if Anweisungen erstellen muss.

Ich kam mit einem Mock-up des for Schleife Code bis zu veranschaulichen:

$_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[]; 
     } 
    } 
}; 

Für diesen Code, ich habe drei Arrays beteiligt, dass ich Zyklus versuche durch, $postAns, $correct und $incorrect . Die $correct und $incorrect Arrays, wenn sie aufgerufen werden, drucken Text aus, je nachdem, ob sie die richtige Antwort erhalten haben.

So für die for Schleife, ich möchte in der Lage sein, durch jeden Wert der $postAns Array zu überprüfen und zu sehen, welche Antwort Nummer es ist und ob es die richtige Antwort ist oder nicht. Wenn es korrekt ist, durchläuft der Code $correct, um den richtigen Text für diese Antwortnummer zu erhalten, und inkrementiert den Wert totalCorrect, die Variable, die speichert, wie viele Benutzer den richtigen Wert erhalten haben. Wenn der Code nicht korrekt ist, durchläuft er den Code $incorrect, um den richtigen Text für diese Antwortnummer zu erhalten.

Ich bin nicht wirklich gut mit Schleifen im Allgemeinen, so dass jede Einsicht/Hilfe sehr geschätzt würde.

EDIT: Inklusive der Formular-Vorlage Code

<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> 

Antwort

0

Das einzige, was Sie in Ihrem Pseudo-Code fehlen, sind die tatsächlichen Antworten. Wenn Sie ein Array mit richtigen Antworten erstellen, wie @fefe angezeigt wird, lautet die Schleife etwa so:

$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

Hallo, Entschuldigung für die späte Antwort, aber dieser Code funktionierte mit ein paar Optimierungen. Ich habe den $ responseIndex außerhalb der if-Anweisung verschoben, da er den gesamten Text anstatt nur des richtigen ausgegeben hat, aber die allgemeine Idee des Codes war unglaublich hilfreich. – Wolfrum

0

Ich weiß nicht wirklich, was Sie zu erreichen versucht, aber die Schleife in etwa so aussehen sollte und Sie können einige Validierung mit if machen oder 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

Hallo, es tut mir leid, wenn es Ihnen unklar erscheint. Um zu verdeutlichen, hat der vorhergehende Code ungefähr neun andere if-Anweisungen, die es mir erlaubten, ein Optionsfeld auszuwählen, seinen Wert zu überprüfen (ob es die richtige Antwort ist oder nicht), dann $ korrekt oder $ falsch zu drucken. Was ich mit der for-Schleife erreichen will, ist, die if-Anweisungen loszuwerden und genau ein paar Zeilen Code, die das tun, was der vorhergehende Code getan hat, und auch den Wert von $ totalCorrect, was der vorherige Code nicht getan hat . Ich hoffe, dies hilft, Dinge zu klären. – Wolfrum

+0

können Sie mir ein HTML-Markup mit dem Formular zeigen? – fefe

+0

Ich habe den Formularcode mit meiner Bearbeitung hinzugefügt. – Wolfrum

Verwandte Themen