【问题标题】:error in calculating average in php code, output error在php代码中计算平均值时出错,输出错误
【发布时间】:2018-01-10 11:50:39
【问题描述】:

我在 php 中有以下代码来计算平均分数。它可以工作,但会产生错误的输出(逻辑错误)

代码

<p>Average Score</p>
                <?php
                $avg = 0;
                foreach ($scores as $score) {
                $avg += array_sum($score);
                }
                $avg /= count($scores);
                echo "<tr> <td>$avg</td></tr>"



                ?>

期望的输出是 97.5(因为分数是 100,100,100 和 90),但它显示的是:100.25

更新 - 分数结构很重要

生成分数的代码的早期部分如下(为了阐明分数的结构 - 请注意,我不想要一个只生成一个数组并对其进行平均的答案,我可以这样做,而是希望它在这种情况下得到修复)

<?php


                $a = new NewQuizScore;
                $scores = $a->getScores($_SESSION['username']);

                foreach ($scores as $score) {
                    echo ("<tr>");
                    echo ("<td>".$score[0]. "</td> ");
                    echo ("<td>".$score[1]. "</td> ");
                    echo ('<td><a href="certificate.php?name='.$score[0].'&score='.$score[1].'">Print Certificate</a></td>');
                    echo ("<td><a href=\"quiz-show.php?quiz=".$score[2]. "\">Take it again!</a></td> ");
                    echo ("</tr>");
                }



                ?>

【问题讨论】:

  • 在 for 循环中尝试$avg += $score;
  • 更改 $avg += array_sum($score);到 $avg +=$score;
  • 我试过了 - 如下所述,它只会导致页面无法加载
  • 您可能希望将array_column($scores,1) 作为您的解决方案的一部分,使用array_sum()count()。我认为它会使代码看起来更干净。

标签: php average


【解决方案1】:

你为什么使用array_sum

array_sum() 是一个计算数组值总和的函数。 $score 的值只是一个数字,对吧?

然后更改下面的行

$avg += array_sum($score);

$avg += $score;

会有用的

试试下面的代码。它适用于您的情况

$avg = 0;
foreach($scores as $score){
    $avg += $score[1];
}
$avg /= count($scores);

echo $avg;

【讨论】:

  • 我试过了,结果页面根本没有加载。有什么建议吗?
  • $scores数组中的数据结构是什么?
  • 请在我的问题中查看此信息的更新 - 非常感谢
  • 你能运行print_r($scores)并提供知道$scores数组的结构吗?它无法从您的问题中识别出来。
  • foreach () 行之前调用它。像print_r($scores);die;一样使用,所以它会在那里终止进程,你只能看到数组值。
【解决方案2】:
<?php
$num = [100,100,100,90]; // marks as array 
$avg = array_sum($num) / count($num); // calculate avrage 

echo $avg; // output : 97.5

?>

如下所示更新您的代码并尝试

$scoreArr = []; // 商店分数数组

    /* Your output array $scores */
    $scores = [
                [
                "1-Python Basics",
                "100",
                "01_PythonB"
                ],
                [
                "1-Python Output",
                "100",
                "02_Print_O"
                ],
                [
                "1-Python Basics",
                "90",
                "02_Print_O"
                ],
                [
                "1-Python Basics",
                "100",
                "03_Variabl"
                ],
            ];

    foreach($scores as $val) {

        $scoreArr[] = $val[1]; 
    }

    $avg = array_sum($scoreArr) / count($scoreArr); // calculate avrage 

    echo $avg;
    die;

【讨论】:

  • 我需要使用现有代码是有原因的,因为分数不在数组中,而是在其他地方生成。
  • 嗨,阿曼 - 我完全按照您的建议进行了尝试,结果显示平均值:0!
  • 你能发布你的 print_r($scores)
  • 我不知道该怎么做。你能解释一下吗?我把那行放在for循环之前,但没有输出?
  • $a = 新的 NewQuizScore; $scores = $a->getScores($_SESSION['username']);回声“
    ”; print_r($scores);死;
猜你喜欢
  • 2021-12-08
  • 2016-08-20
  • 2016-06-01
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
相关资源
最近更新 更多