【问题标题】:Most efficient way to compare values in an array in PHP在 PHP 中比较数组中的值的最有效方法
【发布时间】:2012-06-02 05:59:23
【问题描述】:

我想使用 PHP 为测验评分。我有一个测验,提交后会提供一系列答案。它们都是真/假,所以数组类似于

array([0] => T, [1] => F, [2] => F)

然后我有一个答案键,类似于

array([0] => T, [1] => F, [2] => T)

我需要检查每个答案,这样我不仅可以计算正确百分比,还可以显示当且仅当错过的问题数量少于 20% 时错过的问题的正确答案。

所以我的问题是,我应该做某种 foreach 循环来遍历每个,还是使用某种数组比较函数更整洁,如果是,哪个?

【问题讨论】:

    标签: php arrays comparison


    【解决方案1】:

    使用foreach():

    $answer   = array(true, true, false, true, false);
    $expected = array(true, true, true,  true, false);
    $error    = array();
    
    foreach ($answer as $k => $v) {
      if ($v !== $expected[$k])
        $error[$k] = $v;
    }
    
    // Display the correct answer if number of mistakes is <= 20%
    if (floatval(count($error) / count($expected)) <= .2) {
      $correct = array_intersect_key($expected, $error);
    }
    

    【讨论】:

      【解决方案2】:

      使用 foreach 循环,您将拥有更多控制权。您可以通过将数组中的相等值除以总问题数来确定正确的百分比。

      【讨论】:

        【解决方案3】:

        以分级阵列为起点。 由于它应该包含所有键(对于所有问题),您可以使用它们来检测提交数组中缺少的键找到所有答案。 如果您要手动计算报告,以下是一个示例:

        $submission = array(1 => true, 3 => false, 4 => true, 100 => true);
        $grading = array(0 => true, 1 => true, 2 => true, 3 => true, 4 => true);
        
        
        //gather data
        $answered = array();
        $missing = array();
        $correct = array();
        $wrong = array();
        foreach ($grading as $key => $answer) {
            if(array_key_exists($key, $submission)) {
                array_push($answered, $key);
                if ($submission[$key] === $answer)
                    array_push($correct, $key);
                else
                    array_push($wrong, $key);
            }
            else
                array_push($missing, $key);
        }
        
        
        //print report
        echo "correct\n";
        print_r($correct);
        echo "\n\n";
        
        echo "wrong\n";
        print_r($wrong);
        echo "\n\n";
        
        echo "missing\n";
        print_r($missing);
        echo "\n\n";
        
        echo "% answered\n";
        echo 100*(count($answered)/count($grading));
        echo "\n\n";
        
        echo "% correct (of all questions)\n";
        echo 100*(count($correct)/count($grading));
        echo "\n\n";
        
        echo "% correct (of all answered)\n";
        echo 100*(count($correct)/count($answered));
        echo "\n\n";
        
        echo "% wrong (of all questions)\n";
        echo 100*(count($wrong)/count($grading));
        echo "\n\n";
        
        echo "% wrong (of all answered)\n";
        echo 100*(count($wrong)/count($answered));
        

        【讨论】:

          猜你喜欢
          • 2013-06-25
          • 2014-06-20
          • 2016-04-13
          • 2021-10-16
          • 2020-05-24
          • 2016-05-26
          • 1970-01-01
          • 2011-08-01
          • 1970-01-01
          相关资源
          最近更新 更多