尝试使用mysql和php打印平均成绩


Trying to print average grade using mysql and php

我正试图从表中某一列的字母成绩中打印出平均成绩。它适用于前两个输入,但在那之后,当我不断添加平均值时,我不确定发生了什么

*我很高兴这不是最干净的代码

$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;