【问题标题】:How to Sum Values in Foreach如何在 Foreach 中对值求和
【发布时间】:2020-02-23 13:36:38
【问题描述】:

我有一个像下面这样的 Foreach 来显示数据库中的数据:

$post = $request->json()->all();

$result = [];
$stock = BrandOutletStock::with('brandItem.brandCategory')->where('id_brand_outlet', $post['id_outlet'])->get()->toArray();

foreach ($stock as $element) {

    $element['brand_item']['qty'] = $element['qty'];
    $qty = $element['qty'];
    $element['brand_item']['opname_pagi'] = 0;
    $element['brand_item']['opname_pagi_after'] =  0;

    $element['brand_item']['opname_delivery'] = 0;
    $element['brand_item']['opname_delivery_after'] =  0;

    $element['brand_item']['opname_malam'] = 0;
    $element['brand_item']['opname_malam_after'] =  0;
    $cat = $element['brand_item']['brand_category']['category'];

    unset($element['brand_item']['brand_category']);


    $select2 = BrandOutletDelivery::with(['brandOutletDeliveryItems' => function($q) use($element, $post){
        $q->where('id_brand_item', $element['id_brand_item'])->whereDate('created_at', $post['date']);
    }])->whereDate('created_at', $post['date'])->where('id_brand_outlet', $post['id_outlet']);

    $select2 = $select2->orderBy('created_at','desc')->get();



    foreach ($select2 as $key => $value){
        foreach ($value['brandOutletDeliveryItems'] as $key1 => $val) {
            $value['id_brand_opname'] = $val['id_brand_delivery'];
            $value['id_brand_item'] = $val['id_brand_item'];
            $value['id_unit'] = $val['id_unit'];
            $value['qty_before'] = $val['qty_before'];
            $value['qty_change'] = $val['qty_change'];
            $value['qty_after'] = $val['qty_after'];
        }
           unset($select2[$key]['brandOutletDeliveryItems']);

    }
    $time2 = (count($select2) != 0) ? strtotime($value['created_at']) :  0;

    $select3 = $select2->toArray();

    if (!empty($select3)) {

        $column2      = array_column($select3, 'type');
        $key_pagi     = array_search('Delivery In', $column2);
        $key_delivery = array_search('Delivery Out', $column2);

        // return $select[$key_malam]['qty_before'];


    $element['brand_item']['opname_delivery']       = ($select3[$key_delivery]['qty_change'] ?? 0 > 0) ? "-".$select3[$key_delivery]['qty_change'] ?? 0 : $select3[$key_delivery]['qty_change'] ?? 0; //Output from sum
}

如果我将代码放在 foreach 之外,那么它的输出是这样的

[
    {
        "id": 125,
        "id_brand": 1,
        "id_brand_outlet": 15,
        "id_user": 5,
        "id_brand_outlet_tujuan": null,
        "alasan": "gabut",
        "no_surat": "QWRR",
        "created_at": "2020-02-21 14:23:38",
        "updated_at": "2020-02-21 14:23:38",
        "type": "Delivery In",
        "id_brand_opname": 125,
        "id_brand_item": 2,
        "id_unit": 2,
        "qty_before": 10,
        "qty_change": 1,
        "qty_after": 11
    },

    {
        "id": 123,
        "id_brand": 1,
        "id_brand_outlet": 15,
        "id_user": 5,
        "id_brand_outlet_tujuan": 14,
        "alasan": "gabut",
        "no_surat": "QWE11",
        "created_at": "2020-02-21 14:23:09",
        "updated_at": "2020-02-21 14:23:09",
        "type": "Delivery Out",
        "id_brand_opname": 123,
        "id_brand_item": 2,
        "id_unit": 2,
        "qty_before": 10,
        "qty_change": 1,
        "qty_after": 9
    },
    {
        "id": 122,
        "id_brand": 1,
        "id_brand_outlet": 15,
        "id_user": 5,
        "id_brand_outlet_tujuan": 14,
        "alasan": "gabut",
        "no_surat": "QWE12",
        "created_at": "2020-02-21 14:22:45",
        "updated_at": "2020-02-21 14:22:45",
        "type": "Delivery Out",
        "id_brand_opname": 122,
        "id_brand_item": 2,
        "id_unit": 2,
        "qty_before": 11,
        "qty_change": 1,
        "qty_after": 10
    }

]

如何从数组中添加“QTY_CHANGE”的元素? 示例:在数组输出中,“QTY_Change”每个都有一个值 1,并且有三个对象,如果加在一起结果是 3。谢谢

【问题讨论】:

    标签: php arrays laravel eloquent


    【解决方案1】:

    你可以这样做:

     $sum = 0; // create a variable
     foreach ($select2 as $key => $value){
                    foreach ($value['brandOutletDeliveryItems'] as $key1 => $val) {
                       // your code
                        $sum+= $val['qty_change'] ; //add this line
                    }
    
     }
    
    echo $sum; // you will get the sum here
    

    【讨论】:

    • $sum+= $val['qty_change'] ;是放在上面还是下面?
    • 你可以把它放在内循环的任何地方,例如foreach ($value['brandOutletDeliveryItems'] as $key1 => $val) {}
    猜你喜欢
    • 2015-05-29
    • 2015-05-22
    • 1970-01-01
    • 2020-11-13
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多