【问题标题】:Creating code logic that uses a for loop to cycle through several arrays创建使用 for 循环在多个数组中循环的代码逻辑
【发布时间】:2016-03-18 18:16:02
【问题描述】:

我正在尝试通过使用for 循环而不是多个if 语句来创建代码逻辑。

这是我之前使用的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 变量。我在这段代码中的问题是它非常低效,因为我最终不得不创建十个左右 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>

【问题讨论】:

    标签: php arrays for-loop


    【解决方案1】:

    您在伪代码中缺少的一件事是实际答案。如果您按照@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++;
    }
    

    【讨论】:

    • 嗨,很抱歉回复晚了,但这段代码经过了一些调整。我将 $responseIndex 移到 if 语句之外,因为它输出了所有文本,而不仅仅是正确的文本,但是代码的总体思路非常有用。
    【解决方案2】:

    我真的不知道你想要实现什么,但循环应该看起来像这样,你可以使用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);
    }
    

    【讨论】:

    • 您好,如果您不清楚,我很抱歉。为了澄清,上面显示的前面的代码有大约九个其他 if 语句,允许我选择一个单选按钮,检查它的值(它是否是正确的答案),然后打印 $correct 或 $incorrect。我试图通过使用 for 循环来实现的是摆脱 if 语句,只需几行代码就可以完成前面的代码所做的事情,并增加 $totalCorrect 的值,这是前面的代码没有做的.我希望这有助于澄清事情。
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    相关资源
    最近更新 更多