2014-09-20 42 views
0

我需要獲得$ product ['stars']的array_sum;所以我可以用它來找到平均值。當我嘗試使用它時,我沒有以某種方式在陣列上使用它?我也相信這是一個字符串。它是否需要轉換爲INT?非常感謝任何想法。PHP array_sum多維

<?php 

$categories = array(); 
while ($row_rsCategories = mysqli_fetch_assoc($res)) { 

    $product_array = array(); 
    $product_array_query = mysqli_query($mysqli,"SELECT id, user_id, client_id, comments, stars FROM reviews WHERE user_id = '".$row_rsCategories['userId']."'"); 

    while($product_array_fetch = mysqli_fetch_array($product_array_query)) { 

     $product_array[] = array("id"=>$product_array_fetch['user_id'],"comments"=>$product_array_fetch['comments'],"stars"=>$product_array_fetch['stars']); 

    }     


    $categories[] = array(
     'id' => $row_rsCategories['userId'], 
     'name' => $row_rsCategories['usersName'], 
     'products' => $product_array, 
    ); 
} 

     foreach ($categories as $category) { 


?>     


<div class="col-md-4"> 
         <div id = "user-square"> 
           <div class="avatar"> 
            <img src="<?php echo $avatarDir.$list['usersAvatar']; ?>" class="publicAvatar" /> 
           </div> 

           <?php  

           echo $category['name']; ?> </br> 

           <?php foreach($category['products'] as $product) { 
            echo $product['stars']; ?> </br> 
           <?php } 

?> 
+0

OT:不執行嵌套查詢,使用'JOIN'一起執行所有查詢。 – Barmar 2014-09-20 19:00:17

回答

2

您也可以用array_map結合array_sum做到這一點:

$starsum = array_sum(array_map(function($x) { return $x['stars']; }, $product_array)); 

但你也可以只計算的總和,當你構建結果的數組:

$starsum = 0; 
$rowcount = 0; 
while($product_array_fetch = mysqli_fetch_array($product_array_query)) { 
    $product_array[] = array("id"=>$product_array_fetch['user_id'],"comments"=>$product_array_fetch['comments'],"stars"=>$product_array_fetch['stars']); 
    $starsum += $product_array_fetch['stars']; 
    $rowcount++; 
} 

$categories[] = array(
    'id' => $row_rsCategories['userId'], 
    'name' => $row_rsCategories['usersName'], 
    'products' => $product_array, 
    'avgstars' => ($rowcount == 0) ? 0 : $starsum/$rowcount 
); 

有不需要將值轉換爲整數,PHP會在你使用算術函數時自動完成。

+0

這是一個很大的幫助,我仍然遇到了一些問題。 $ starsum = 0;使它始終爲0.如果我刪除,我得到的總和。但我不確定如何正確打印。如果我把它放在我的<?php foreach($ category ['products'] as $ product){ echo $ product ['stars']; ?>
<?php它打印出用戶所有星級的相同數字。如果我把它放在上面的循環中,它會爲每個用戶打印出相同的數字。謝謝 – looloobs 2014-09-20 19:46:02

+0

它不應該總是0.'while'循環會增加它。 – Barmar 2014-09-20 19:48:54

+0

我添加了代碼,顯示如何將平均評分放入'$ categories'。 – Barmar 2014-09-20 19:53:13