美文网首页
记一次php的循环递归的低级错误

记一次php的循环递归的低级错误

作者: 路过的人儿 | 来源:发表于2018-12-24 18:49 被阅读0次

背景

出发点是为了减少一次性查询的数据量,做了一个while循环,然后当不符合条件的时候,把while循环break掉

错误的做法

 $openIds = $this->getUnionIdByOpenId();
      \Log::info(json_encode($openIds));
        while ($openIds != null){
            $app = app('wechat.official_account');
            $users = $app->user->select($openIds);
            $list = [];
            foreach ($users["user_info_list"] as $user){
                $list[] = [
                    'open_id' => $user['openid'],
                    'union_id' => $user['unionid'],
                    'created_at' => Carbon::now(),
                    'updated_at' => Carbon::now()
                ];
            }
            \DB::table('official_account')->insert($list);
            $this->insertAccount();
        }
  • 在while里头写递归,是不会生效的,while会一直执行里头的循环体,且上述代码并不会break掉while的循环,因此会不断的执行写库的操作

正确的做法

public function insertAccount(){
        while (1){
            $openIds = $this->getUnionIdByOpenId();
            \Log::info(json_encode($openIds));
            if (count($openIds) > 0){
                $app = app('wechat.official_account');
                $users = $app->user->select($openIds);
                $list = [];
                foreach ($users["user_info_list"] as $user){
                    $list[] = [
                        'open_id' => $user['openid'],
                        'union_id' => $user['unionid'],
                        'created_at' => Carbon::now(),
                        'updated_at' => Carbon::now()
                    ];
                }
                \DB::table('official_account')->insert($list);
            }else{
                break;
            }
        }
        echo "执行完毕";
        return;
    }
  • 正确的操作应该如上面这段代码,在循环体内做判断,并在合适的时候讲循环break掉

相关文章

  • 记一次php的循环递归的低级错误

    背景 出发点是为了减少一次性查询的数据量,做了一个while循环,然后当不符合条件的时候,把while循环brea...

  • php实现无限极分类

    一、两种实现php无限极分类 设置原始数据 1. 使用php递归实现php无限极分类 通过foreach循环实现无...

  • 记一次使用Retrofit低级错误

    在使用Retrofit时,我们一般使用的是GsonConverterFactory转换器。但是有时候后台会返回为空...

  • 低级的错误

    尊敬的经理,亲爱的同事,大家好。 先来个自我简单的介绍,我叫肖少苹,来自广东。 由于第一天来上班给...

  • 低级的错误

    2010-7-1 昨天,因为一件事不关己的事情大大的发了火!自己都感觉头顶上有火焰在燃烧。对象当然是那个所谓的上司...

  • 递归引发的血案

    正确写法: 错误写法: 两种DFS递归的写法差异在于: 错误的写法把if...return写在了for循环里面,没...

  • 领扣算法12:整数转换为罗马数字

    题目描述: 递归实现: 循环实现: 递归与循环的比较:

  • 一次严重的低级错误

    一次,导弹旅正进行战略导弹整修,设备忽然跳闸。技术人员检查了三天也没找到故障原因,千里之外的专家赶来会诊,也没结果...

  • 二叉树

    前序遍历 递归思路:定义 helper 函数 非递归思路:用栈错误:加入栈顺序要先右儿子后左儿子中序遍历非递归记不...

  • 虚拟机栈溢出

    错误原因:java.lang.StackOverflowError 栈内存溢出 栈溢出产生递归调用,循环遍历是不会...

网友评论

      本文标题:记一次php的循环递归的低级错误

      本文链接:https://www.haomeiwen.com/subject/nkttlqtx.html