2017-02-10 153 views
0

我已经编写了下面计算加权平均值的代码。该算法是正确的,但我的问题是,当值$ row ['grade']是例如:9.5它被截断为9,当值为10它被截断为1。从一些测试中,我相信问题发生在将值插入到数组中时。我已经尝试了解我所知道的一切,但是我无法让它工作。有任何想法吗?以下代码如下:在mysql查询后PHP值被截断

<?php 


require 'database_connect.php'; 
$username=$_SESSION["username"];  
$sql="SELECT dm,grade from subject,attends where username='$username' AND grade>='5' and subject_code=code"; 
$result = mysqli_query($conn,$sql); 
$i=-1; 
while($row = mysqli_fetch_array($result)){ 
    $i=$i+1; 
    $grade[$i]=$row['grade']; 
    if($row['dm']<=2){ 
     $weight[$i]=1.0; 
    }elseif($row['dm']<=4){ 
     $weight[$i]=1.5; 
    }else{ 
     $weight[$i]=2.0; 
    } 

} 
if($i>=0){ 
    $total=array_sum($weight); 

    $part=0; 
    for($j=0;$j<=$i;$j++){ 
     echo $grade[$j].","; 
     echo $weight[$j]."|||"; 
     $part=$part+$grade[$j]*$weight[$j]; 

    } 
    $full=$part/$total; 

    // echo round($full, 2); 


}else{ 
    echo "0"; 
} 




         $conn->close(); 

?> 
+1

发布您的数据库架构 –

+0

'和subject_code = code'是否应该代表伪代码?如果不是的话,这里正在冒险。 –

+0

**旁注:**因为您刚开始使用数据库查询进行编码。请尽早了解[准备的陈述](http://php.net/manual/en/mysqli.prepare.php)的重要性/使用。 –

回答

0

$grade = array(); $weight = array();放在while循环之前。

编辑:它始终是初始化之前第一次使用阵列是一个好主意,因为如果$grade某种程度上恰好是一个字符串,$grade[0]参考随后将意味着字符串的第一个字符,而不是数组的第一元素

对于PHP 5.4及更新的版本,您还可以编写$grade = []; $weight = [];