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
相关产品推荐
相关产品推荐

