Мне нужно получить array_sum из $ product [‘stars’]; так что я могу использовать его, чтобы найти среднее. Когда я пытаюсь использовать это, я не использую это как-то на массиве? Также я считаю, что это приходит как строка. Нужно ли конвертировать в INT? Большое спасибо за любые идеи.
<?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 }
?>
Вы могли бы сделать это, комбинируя array_sum
с array_map
:
$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 сделает это автоматически, когда вы используете над ними арифметические функции.
Других решений пока нет …