[英]php array and array sum not returning right value
當我在網頁上調用此函數時,它應該回顯您購物車中產品的總價值,但是它僅回顯具有最高產品ID的產品的價值。 而不是這些值的總和。
function total_price() {
$total = 0;
global $link;
$ip = getIp();
$sel_price= "select * from cart where ip_add='$ip'";
$run_price= mysqli_query($link, $sel_price);
while($p_price=mysqli_fetch_array($run_price)) {
$pro_id = $p_price['id'];
$pro_price = "select * from products where id='$pro_id'";
$run_pro_price = mysqli_query($link, $pro_price);
while ($pp_price = mysqli_fetch_array($run_pro_price)){
$product_price = array($pp_price['prijs']);
$values = array_sum($product_price);
$total = number_format((float)$values, 2, ',', '');
}
}
echo "€ " .$total;
}
沒有理由使用array_sum
。 具有一個元素的數組的總和就是該元素的值。 如果將每個價格推到數組上,然后在循環末尾計算總和,則可以使用array_sum
。 但是您可以在每次循環中將總值相加,因此不需要這樣做。
while ($pp_price = mysqli_fetch_array($run_pro_price)){
$values += $pp_price['prijs'];
}
}
$total = number_format((float)$values, 2, ',', '');
echo "€" . $total;
您還可以在單個查詢中完成所有操作:
$sel_total = "SELECT SUM(prijs) AS total
FROM cart
JOIN products ON cart.id = product.id
WHERE ip_add = '$ip'";
$res = mysqli_query($sel_total);
$row = mysqli_fetch_assoc($res);
$total = number_format($row['total'], 2, ',', '');
echo "€" . $total;
$total += number_format((float)$values, 2, ',', '');
應該管用
<?php
function total_price() {
$values = 0;
$total = 0;
global $link;
$ip = getIp();
$sel_price= "select * from cart where ip_add='$ip'";
$run_price= mysqli_query($link, $sel_price);
while($p_price=mysqli_fetch_array($run_price)) {
$pro_id = $p_price['id'];
$pro_price = "select * from products where id='$pro_id'";
$run_pro_price = mysqli_query($link, $pro_price);
while ($pp_price = mysqli_fetch_array($run_pro_price)){
//$product_price = array($pp_price['prijs']);
//this will cumulate sum
$values += $pp_price['prijs'];
//$total = number_format((float)$values, 2, ',', '');
}
}
//this will format result
$total = number_format((float)$values, 2, ',', '');
echo "€ " .$total;
}
順便說一句,為什么不嘗試使用JOIN語句呢???
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.