PHP:如何检查复选框的值并与数组进行比较?

PHP:如何检查复选框的值并与数组进行比较?,php,arrays,if-statement,Php,Arrays,If Statement,我正在制作一个测验应用程序,其中我有一个PHP中的多项选择题。用户可以获得一个问题和多个选项来选择答案。他们得到的选项将每次刷新(随机/随机函数)。因此,当用户选中复选框,并用正确答案验证选项并为其评分时。例如,如果有3个正确的选择,用户选择全部3个正确的,则得5分,部分正确得3分,错误选择得0分。请在下面找到我的代码。谢谢你抽出时间 <!DOCTYPE html> <html lang="en"> <head> <title>Bootstrap

我正在制作一个测验应用程序,其中我有一个PHP中的多项选择题。用户可以获得一个问题和多个选项来选择答案。他们得到的选项将每次刷新(随机/随机函数)。因此,当用户选中复选框,并用正确答案验证选项并为其评分时。例如,如果有3个正确的选择,用户选择全部3个正确的,则得5分,部分正确得3分,错误选择得0分。请在下面找到我的代码。谢谢你抽出时间

<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="css/style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<nav class="navbar navbar-inverse"></nav>
<div class="container-fluid text-center">
  <div class="row content">
    <div class="col-sm-2 sidenav">
      <p>&nbsp;</p>
    </div>
    <div class="col-sm-8 text-left">
      <h1>Question 1</h1>
      <p>Multiple choice question</p>
      <div class="row"> </div>
      <hr>
      <p>Which of the following cities are in India?</p>
      <?php
$a=array("London","Mumbai","Berlin","Tokyo","Delhi", "Patna" , "Lahore");
$random_keys=array_rand($a,7);
shuffle($a);?>
      <div class="form-check">
        <form class="form-inline" action="#" method="post">
          <div class="checkbox">
            <label class="form-check-label">
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[0]]?>">
              <?php echo $a[$random_keys[0]]."<br>";?>
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[1]]?>">
              <?php echo $a[$random_keys[1]]."<br>";?>
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[2]]?>">
              <?php echo $a[$random_keys[2]]."<br>";?>
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[3]]?>">
              <?php echo $a[$random_keys[3]]."<br>";?>
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[4]]?>">
              <?php echo $a[$random_keys[4]]."<br>";?>
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[5]]?>">
              <?php echo $a[$random_keys[5]]."<br>";?>
              <input class="form-check-input" type="checkbox" name="check_list[]"  value="<?php echo $a[$random_keys[6]]?>">
              <?php echo $a[$random_keys[6]]."<br>";?> </label>
          </div>
          <div class="form-group">
            <button type="submit" class="btn btn-default" name="submit">Submit</button>
          </div>
        </form>
      <?php
      $totalscore = 0;
            if(isset($_POST["submit"])){

            if (!empty($_POST["check_list"])){
            echo "<p>  You Selected: </p>";

            foreach ($_POST["check_list"] as $answers)


                echo "<p>".$answers ."</p>";

            }

            else{

            echo "Please make atleast one selection.";  
            }
            }


?>


      </div>
    </div>
    <br>
    <br>
  </div>
</div>
</div>
<footer class="container-fluid text-center">
  <p>SM (c) 2018</p>
</footer>
</body>
</html>

引导示例

问题1 选择题


以下哪个城市在印度


正如juakali92所说,可以使用两个数组。您可以做的是创建另一个包含正确答案的数组。然后将包含用户答案的数组与正确答案数组与array_diff()函数进行比较,找出错误答案的计数。使用count()获取正确答案的计数和正确答案的最大计数。然后用这些数据进行比较/做任何你想做的事情

下面是一个例子:

<?php

$totalscore = 0;

//  All answers
$a = array("london", "mumbai", "berlin", "tokyo", "delhi", "patna", "lahore");
$rnd = array_rand($a, 7);
shuffle($a);

//  Correct answers for same questions
$c = array("mumbai", "delhi", "patna");

//  Check answer
if (isSet($_POST['submit'])) {

    $user_answerArr = $_POST['check_list'];

    //  Get count of wrong answers
    $wrongCount = count(array_diff($c, $user_answerArr));

    //  Max points for right answers
    $maxPoints = count($c);

    //  For this example each right answer gives 1 point
    $totalscore += $maxPoints - $wrongCount;

    echo "Score: " . $totalscore;
}

?>

<form method="post">
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[0]]; ?>"/> <?php echo $a[$rnd[0]] ?> <br>
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[1]]; ?>"/> <?php echo $a[$rnd[1]] ?> <br>
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[2]]; ?>"/> <?php echo $a[$rnd[2]] ?> <br>
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[3]]; ?>"/> <?php echo $a[$rnd[3]] ?> <br>
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[4]]; ?>"/> <?php echo $a[$rnd[4]] ?> <br>
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[5]]; ?>"/> <?php echo $a[$rnd[5]] ?> <br>
    <input type="checkbox" name="check_list[]" value="<?php echo $a[$rnd[6]]; ?>"/> <?php echo $a[$rnd[6]] ?> <br>
    <button type="submit" name="submit">Submit</button>
</form>


你没有设置任何答案来核对吗?拥有两个独立的数组,如correctAnswers和incorrectAnswers,从这两个数组中提取随机值,并将它们合并到一个数组中。然后,您所要做的就是在每个
$\u POST[“check\u list”]
中循环,并在正确答案数组中的循环值上使用
,如果正确,则将其添加到总分中。谢谢@Juakali92,您能帮助我吗。我不确定,我是一个新的编码。这是什么家庭作业?如果是这样的话,我想如果你按照我的建议去做会更好,如果你陷入困境,我会帮助你