我试图从我表格中的一个颜色打印出来自字母等级的平均成绩。它适用于前两个输入,但在此之后,当我继续添加平均值不再是真的时,我不确定发生了什么。
*我重申这不是最干净的代码
$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'];
}
答案 0 :(得分:1)
有两个问题:
$totalGrade = $totalGrade/$row['id'];
不应该在循环中,它当前是。将它移到while循环之外。
$totalGrade = $totalGrade/$row['id'];
除以行的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已被弃用,并且不安全,依此类推:PHP documentation on mysql
答案 1 :(得分:1)
我想通过向您展示我喜欢的所有条件的替代方案来添加@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;