You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现考试分数平均值计算与显示问题求助

解决PHP考试分数平均值计算错误的问题

嘿,我发现你计算平均分出错的原因啦!问题出在你用了array_sum($score)——从你原来的代码能看出来,每个$score数组里包含两个元素:第一个是考试的标识(比如1-Python Basics或者考试ID),第二个才是实际的分数。array_sum($score)会把这两个元素都加起来,如果第一个元素是数字(比如考试ID),就会被算进总和里,这就导致你的总和偏大,最终平均分算错了。

正确的计算方法

我们只需要提取每个$score里的分数部分(也就是$score[1])来累加,同时还要注意处理没有分数的情况,避免出现除以0的错误。

修正后的代码如下:

<p>Average Score</p> 
<?php 
$avg = 0;
$totalScore = 0;
$scoreCount = 0;

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

// 遍历分数数组,只累加实际分数
foreach ($scores as $score) {
    // 确保分数是有效的数字,避免非数值干扰
    if (is_numeric($score[1])) {
        $totalScore += (float)$score[1];
        $scoreCount++;
    }
}

// 计算平均分,处理没有分数的情况
if ($scoreCount > 0) {
    $avg = $totalScore / $scoreCount;
    // 可以用number_format保留小数位数,比如保留2位
    $avg = number_format($avg, 2);
} else {
    $avg = "No scores available";
}

echo "<tr> <td>$avg</td></tr>";
?> 
<p></br></br></br></br></p>

代码说明

  • 我们单独维护$totalScore(总分)和$scoreCount(有效分数的数量),避免把考试标识的数值算进去。
  • 增加了is_numeric()检查,确保只累加有效的分数值,防止非数值数据干扰计算。
  • 处理了没有分数的情况,避免出现除以0的错误,同时给出友好提示。
  • 用number_format()可以让平均分显示更规范(比如保留两位小数)。

这样修改后,就能得到正确的97.5啦!

内容的提问来源于stack exchange,提问作者Compoot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:50:39