2013-07-11 53 views
0

我从MySQL数据库中调用了一些变量,并通过上一页的HTML表单将它们与POSTED中的一些变量进行比较。他们实际上是正确答案并给出答案。在PHP中添加带变量的字符串并循环

我现在的结构是这样的:

if($ans1==$que1){ 
echo"TRUE"; 
} 
if($ans2==$que2){ 
echo"TRUE"; 
} 
if($ans3==$que3){ 
echo"TRUE"; 
} 
//AND SO ON... 

的结构是不是真的忙碌,直到当时只有3个问题。但现在问题增加到100.我想知道如何做这样的事情:

for(i=1; i=100; i++){ 
if($ans.$i==$que.$i){ 
echo"TRUE"; 
$total_correct_ans=$total_correct_ans+1; 
} 
} 
echo"Total correct answers are ". $total_correct_ans; 
+0

为什么不做一个foreach()循环通过post数组 – 2013-07-11 00:20:40

回答

3

首先,考虑使用数组来代替;他们意味着这种重复的东西:

// $answers = [1, 3, 2]; 
// $questions = [1, 2, 3]; 
for ($i = 0; $i < count($answers); ++$i) { 
    if ($answers[$i] == $questions[$i]) { 
     echo "TRUE" 
    }; 
} 

如果这是真的不可能的,你可以使用variable variables

if (${"ans$i"} == ${"que$i"}) { 
} 
+0

它的工作。谢谢 – user2561597

+0

太棒了!阅读[关于]如何接受答案的部分。 –

0

你也可以使用更复杂的阵列都建立问题表格然后检查答案。试想,如果你有这个数组:

$questions = array(
    array(
     "question" => "What color is the sky", 
     "answers" => array(
      "red", 
      "green", 
      "blue", 
      "penquine" 
     ), 
     "correct_answer" => 2 
    ), 
    array(
     "question" => "What is the bestest langugage in the world!", 
     "answers" => array(
      "C#", 
      "English", 
      "Brainfuck", 
      "PHP", 
     ), 
     "correct_answer" => 3 
    ), 
); 

在问题被问的页面,你可以通过数组去和打印每一个问题与它的答案创建表单。有点像:

echo "<form action='check_answers.php' method='post'>\n"; 
foreach ($questions as $qi => $q) { 
    echo "<h1>{$q["question"]}</h1>\n"; 
    foreach ($q["answers"] as $ai => $answer) { 
     echo "<label><input type='radio' name='answers[$qi]' value='$ai'> $answer</label>\n"; 
    } 
} 
echo "<input type='submit'></form>"; 

的数据然后可在check_answers.php文件由“correct_answers”元件与由表格中提供的值的每个问题比较来检查。

if (isset($_POST["answers"]) && is_array($_POST["answers"])) { 
    $correctAnswers = array(); 
    $incorrectAnswers = array(); 

    foreach ($_POST["answers"] as $question => $answer) { 
     if ($questions[$question]["correct_answer"] == $answer) { 
      $correctAnswers[] = $questions; 
     } 
     else { 
      $incorrectAnswers[] = $question; 
     } 
    } 

    echo "You had " . count($correctAnswers) . " correct answers.<br>\n"; 
    echo "You had " . count($incorrectAnswers) . " incorrect answers.<br>\n"; 
} 

你甚至可以扩展,为precicely哪些问题的用户得到了错误的和正确的,因为两个指标都存储在阵列中显示。

$questions数组虽然在上例中是静态的,但也可以很容易地从MySQL模式生成。

function generateQuestions(\PDO $pdo) { 
    $questions = array(); 

    $sql = "SELECT id, question FROM questions"; 
    $result = $pdo->query($sql); 
    foreach ($result as $row) { 
     $question = array(
      "question" => $row["question"], 
      "answers" => array(), 
      "correct_answer" => 0 
     ); 

     $answerSql = "SELECT id, answer, isCorrect FROM answers 
        WHERE question_id = {$row["id"]}"; 
     $answerResult = $pdo->query($answerSql); 
     foreach ($answerResult as $answer) { 
      $answers[$answer["id"]] = $answer["answer"]; 
      if ($anser["isCorrect"]) { 
       $question["correct_answer"] = $answer["id"]; 
      } 
     } 

     $questions[$row["id"]] = $question; 
    } 

    return $question; 
}