foreach()循环嵌套foreach()修bug

       在一商城项目,给前端开发提供接口,有一个功能要求是这样的,提交订单如果提交多个商品,而商品属于不同商家,则要求每个商品生成一个订单(以前做法是,多个商品也会生成一个订单,但是假如在代付款选项中,客户并不能单独为每个商品付款),现在又加的是不同的商品,给商家留言信息。而留言信息,是通过json字符串的形式接收,并存入数据库对应的字段。

      购物车rec_id,假如在提交订单时,不同的商品会添加到订单表生成不同的订单,去购物车表拿到不同的购物车商品信息。

$tid_inf = array_filter(explode(',',$_REQUEST['rec_id']));
foreach ($tid_inf as $key => $value) {
    //店家留言说明
    $partner_status = $_GET['partner_status'];
    partner_status=[{"partner_id":"117","partner_status":"给店家留言"},{"partner_id":"78","partner_status":"这个东西真不错"}]
    $partner_statuses = json_decode($partner_status,true);
    //$partner_statuses打印的输出结果是这样的
    /*
    array(2) {
        [0]=>
        array(2) {
            ["partner_id"]=>
            string(3) "117"
            ["partner_status"]=>
            string(4) "给店家留言"
        }
        [1]=>
            array(2) {
            ["partner_id"]=>
            string(2) "78"
            ["partner_status"]=>
            string(3) "这个东西真不错"
        }
    }
    */
    if(!empty($partner_statuses)){
        foreach ($partner_statuses as $key1 => $value1) {
            if($value1['partner_id'] == $neworder['partner_id']){
                $neworder['partner_status'] = $value1['partner_status'];
            }else{
                $neworder['partner_status'] = '';
            }
        }
    }
}

       因为不同的留言,是对应商家,也是不同的订单信息,保存到订单表里,输出的结果总是第一个为空,保留第二个,存到订单表里。

       这个错误找了老半天,找不到原因,猛然间恍然大悟,原来是foreach循环里又嵌套了一个foreach()在执行循环的时候,第一层foreach()循环执行时,如果购物车id是两个1(对应的商家是117),2(对应的商家是78);商家id是117(携带的参数是:给店家留言),78(携带的参数是:这个东西真不错);而在后面携带的json参数,,前面对应是第二层foreach()循环赋值最后一个值,如果$value1['partner_id']等于$neworder['partner_id']值时,$neworder['partner_status'],购物车id循环一次,只有最后一次才会赋值,之前循环的字段几次总是为空。

if(!empty($partner_statuses)){
    foreach ($partner_statuses as $key1 => $value1) {
        if($value1['partner_id'] == $neworder['partner_id']){
            $neworder['partner_status'] = $value1['partner_status'];
        }
    }
}

写代码总是个细活,马虎不得啊!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值