2017-07-02 16 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; 

それはめちゃくちゃだ、それのどれもそれがあなたにとって何を意味するのですか?

ちょうどこの操作を行います。あなたが実際にあなたもする必要はありませんあなたの$query結果

  • return array_sum($row)/count($row);
  • にそれを

  • fetch_rowを使用できるように

    • MySQLiの接続でパスを何かを変えれば、データベースからのあなたのデータは、すでに平均化された完璧な形になっています!

  • +0

    私はいくつかのコードで説明することができます配列のもので良くないです。 –

    +0

    私はそれほどコードを作りませんでしたし、動作します。 '$ arrays = $ query; \t foreach($配列としての$配列){ \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平均= ceil(array_sum($ rating)/ count($ rating)); \t return $ average; ' –

    +0

    うん、確かに。あるいは、単に$ average = array_sum($ query [0])/ count($ query [0]); '... –

    関連する問題