2017-07-02 89 views
1

每个人,使用PHP从Mysql db评分平均值

我正在为评价的每个评论和4个字段(价格,质量,支持和交付)评级平均值。从以下函数返回错误的平均值。它应该返回2,但返回1.

function review_rating_average($pid,$cid,$rid) { 
    $query = mysqli_query("SELECT rate_price, rate_quality, rate_support, rate_delivery FROM reviews WHERE (product_id = $pid and client_id = $cid and review_id = $rid)"); 

    $array = array(); 
    foreach($query as $row) { 
     $array[1] = 2; 
     $array[2] = 1; 
     $array[3] = 4; 
     $array[4] = 3; 
    } 
    $result = implode(", ", $array); 

    $stars = array($result);  
    foreach ($stars as $star) { 
     $rating[] = $star; 
    } 

    $average = array_sum($rating)/count($rating); 
    return $average; 
} 

回答

1

您的代码是......各种错误。

我从没有真正使用$query(或$row)意味着抛开,我会认为这只是用于测试,只是看它的休息...

// $array = [ , 2,1,4,3]; 
$result = implode(", ", $array); 
// $result = "2, 1, 4, 3"; 

$stars = array($result);  
// $stars = ["2, 1, 4, 3"]; 
foreach ($stars as $star) { 
    $rating[] = $star; 
} 
// $rating = ["2, 1, 4, 3"]; // foreach loop is a big no-op... 

$average = array_sum($rating)/count($rating); 
// $average = 2 (due to casting string to number)/1 = 2 
return $average; 

这是一个烂摊子,没有它做你的意思是做它。

只是这样做:

  • 传中,库MySQLi连接,这样就可以实际使用它
  • fetch_row$query结果
  • return array_sum($row)/count($row);

你甚至都不需要转换任何东西,您的数据库中的数据已经以完美的形式被平均化!

+0

我不擅长阵列的东西可以请一些代码解释。 –

+0

我使它成为现在少的代码并且它可以工作, '$ arrays = $ query; \t foreach($ arrays as $ array){ \t \t $ rating [0] = $ array ['rating_price']; \t \t $ rating [1] = $ array ['rating_quality']; \t \t $ rating [2] = $ array ['rating_support']; \t \t $ rating [3] = $ array ['rating_delivery']; \t} \t $ average = ceil(array_sum($ rating)/ count($ rating)); \t return $ average;' –

+0

呃......当然。或者你可以做'$ average = array_sum($ query [0])/ count($ query [0]);'...... –