回显值并在循环内加在一起以形成总

时间:2018-01-25 09:28:02

标签: php

我最初需要将x amount [trip_price]的数组总和从系统中的单个预订中添加到一起。这是一次预订,包含同一预订中的两种类型的款项。

总金额是$booking_total = $post_metas['fcb_booking_total'][0];,而这又产生一个静态数字,因此当预订发生变化时,价格从未更新过。

$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc");

print_r($get_price);

Array
(
    [0] => stdClass Object
        (
            [trip_price] => 0
        )

    [1] => stdClass Object
        (
            [trip_price] => 5000
        )

)

EDIT。

从下面的答案我用过这个。这使得更新将价格更改为用户等的新价格。这需要在电子邮件确认中显示。

$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc");
$booking_total = 0;
foreach($get_price as $key => $value) {
    $booking_total += $value->trip_price;
};

如果用户在网站上支付了100%或50%的选项,任何管理员折扣和5%的额外费用,那么我用它来返回价格

$total = $booking_total + $extra_total;
$total = $total * 1.05;


if($need_to_pay){
    if($amounttopay == 50){
        $total = $total / 2;
    }
}

if($admin_discount>0){
    $total = $total - $admin_discount;
}

return $total;

5 个答案:

答案 0 :(得分:2)

尝试此代码:

$total = 0;
foreach($get_price as $key => $value) {
    $total += $value->trip_price;
}

echo $total;

答案 1 :(得分:2)

使用循环foreach来回显和求和:

$sum = 0;
foreach ($get_price as $price) {
    echo "price =" . $price->trip_price . "\n";
    $sum += $price->trip_price;
}

echo "Total sum=" . $sum;

答案 2 :(得分:2)

您可以在php中使用array_sum()

array_sum - 计算数组中值的总和

SELECT
    *,
    SG = CASE Q.Cnt
        WHEN 1 THEN '3 & 4' 
       ELSE CAST(T1.[Services] AS VARCHAR(10))+' Only' END
    FROM YourTable T1
       OUTER APPLY
       (
          SELECT
             Cnt = COUNT(DISTINCT Srv)
             FROM YourTable T2
                WHERE t2.Id = t1.Id
                    AND t2.[Services]  IN (3,4)
                    AND t2.[Services] <> t1.[Services]
       )Q

答案 3 :(得分:1)

检查数组是否为空。

使用PHP的empty()功能。

如果我们不为此添加支票,我们最终会出错。

循环数组。

拿一个变量来节省总数。

在每次迭代中添加总和。

$get_price = $wpdb->get_results("select trip_price from fcb_booking where order_id = " . $order_id . " order by start_date_time asc");
$total = 0;
if (! empty($get_price)) {
 foreach($get_price as $key => $value) {
  $total += $value->trip_price;
 }
}
echo $total;

答案 4 :(得分:1)

我不确定你的目标是打印出每个元素和/或计算总和。

有几种方法可以实现这一目标:

  1. 完整SQL :依赖SQL引擎计算总和

    $totalAmount = $wpdb->get_results("
        SELECT SUM(trip_price) AS total_amount
        FROM fcb_booking
        WHERE order_id = " . $order_id . " ORDER BY start_date_time ASC");
    

    在这种情况下,您无法真正显示您正在添加的每个元素。

  2. 在Php中循环

    $prices = $wpdb->get_results("
        SELECT trip_price
        FROM fcb_booking
        WHERE order_id = " . $order_id . "
        ORDER BY start_date_time ASC");
    
    // Array map gives $arr = [0, 5000];
    $arr = array_map(function ($el) {
        return $el->trip_price;
    }, $prices);
    
    // Adding up prices: 0 + 5000 = 5000
    $sum = array_sum($arr);
    
    var_dump($sum);
    // => int(5000)
    

    如果您要打印每个价格,只需在echo $el的可调用项中添加array_map