我正试图从表中某一列的字母成绩中打印出平均成绩。它适用于前两个输入,但在那之后,当我不断添加平均值时,我不确定发生了什么
*我很高兴这不是最干净的代码
$totalGrade =0;
$result = mysqli_query($con,"SELECT id,grade FROM gpa");
while ($row = mysqli_fetch_array($result)) {
if($row['grade'] == 'A') {
$numberGrade = 4;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'A-') {
$numberGrade = 3.67;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'B+') {
$numberGrade = 3.33;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'B') {
$numberGrade = 3;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'B-') {
$numberGrade = 2.67;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'C+') {
$numberGrade = 2.33;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'C') {
$numberGrade = 2;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'C-') {
$numberGrade = 1.67;
$totalGrade = ($totalGrade + $numberGrade);
} if ($row['grade'] == 'D') {
$numberGrade = 1;
$totalGrade = ($totalGrade + $numberGrade);
} else {
$numberGrade = 0;
$totalGrade = ($totalGrade + $numberGrade);
}
$totalGrade = $totalGrade/$row['id'];
}
有两个问题:
$totalGrade = $totalGrade/$row['id'];
不应该在当前的循环中。将它移到while循环之外。
CCD_ 2除以该行的ID。你不能指望这代表了加起来的分数。
相反,将放在循环之前:
$count = 0;
然后,在你的循环中,输入:
$count++;
然后,最后,在您的循环外,放入:
$totalGrade = $totalGrade/$count;
最后,有一种更优雅(更易于维护)的方法可以做到这一点,使用数组映射或类似的方法。我强烈建议调查一下。
基本上,在循环之前,设置一个数组,如下所示:
$grade_values = array( 'A' => 4.0,
'A-'=> 3.67,
'B' => 3.0,
...etc...
);
然后,你的整个功能看起来是这样的:
while ($row = mysqli_fetch_array($result)) {
$totalGrade+= ($grade_value[$row['grade']]);
$count++;
}
$count = mysql_num_rows($result);
$totalGrade = $totalGrade/$count;
保养更简单。这只是代码的一小部分。而且它看起来更令人愉快!
好的,最后,您不应该使用mysql。您应该使用mysqli或PDO。Mysql被弃用,不安全,等等:Mysql 上的PHP文档
我想为@cale_b的答案添加一个选项,向您展示我喜欢的所有条件语句的替代方案。你可以用数组代替,看看
<?php
$totalGrade = 0;
$result = mysqli_query($con, "SELECT id,grade FROM gpa");
$grades = array(
'A' => 4,
'A-' => 3.67,
'B+' => 3.33,
'B' => 3,
'B-' => 2.67,
'C+' => 2.33,
'C' => 2,
'C-' => 1.67,
'D' => 1
);
$totalGrade = 0;
$numGrades = 0;
while($row = mysqli_fetch_array($result)) {
$numberGrade = 0;
$grade = $row['grade'];
if(isset($grades[$grade]))
$numberGrade = $grades[$grade];
$totalGrade = $totalGrade + $numberGrade;
$numGrades++;
}
$totalGrade /= $numGrades;