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

时间:2013-12-12 01:27:51

标签: php mysql loops

我试图从我表格中的一个颜色打印出来自字母等级的平均成绩。它适用于前两个输入,但在此之后,当我继续添加平均值不再是真的时,我不确定发生了什么。

*我重申这不是最干净的代码

$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'];
}

2 个答案:

答案 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;