多层嵌套的使用要点及优化


对于多层嵌套循环 应该保证在循环中的数据库查询,最好一次性都查完,不要每次都查一次数据库。。减少查询数据库的次数


尽量避免使用多层嵌套

例子:

没优化之前

if (!empty($param['register_from_group'])) {
    $register_from = explode(',', $param['register_from_group']);
    foreach ($register_from as $key => $val) {
        $user_group = self::filter_user($val, $param);
        foreach ($user_group as $k => $v) {
            $cur_user = User::model()->find('user_id=:user_id', array(':user_id' => $v->user_id));
            $user_info[$k]['user_id'] = $v->user_id;
            $user_info[$k]['phone'] = $cur_user->user_name;
            $user_info[$k]['rid'] = isset($param['rid']) ? $param['rid'] : 0;
            $user_info[$k]['id'] = $v->id;
            $user_info[$k]['sequence_id'] = $cur_user->sequence_id;
        }
        $sms = SmsCrontabConfig::model()->find('id=:id and status=1', array('id' => $param['id']));
        $sms->uptime = time();
        $sms->save();
        self::SendReward($user_info, $param);
    }
}

优化之后:
if (!empty($param['register_from_group'])) {
    $register_from = explode(',', $param['register_from_group']);
    $user_group=array();
    foreach ($register_from as $key => $val) {
        $user_group[$key] = self::filter_user($val, $param);
    }
    $user_id=array();
    foreach($user_group as $k => $v) {
        foreach($v as $ks=>$va){
            $user_id[$ks]=$va->user_id;
        }
    }

    $criteria=new CDbCriteria();
    $criteria->select='*';
    $criteria->addInCondition('user_id',$user_id);
    $cur_user=User::model()->findAll($criteria);
    foreach($cur_user as $k=>$v){
        $user_info[$k]['user_id'] = $v->user_id;
        $user_info[$k]['phone'] = $v->user_name;
        $user_info[$k]['rid'] = isset($param['rid']) ? $param['rid'] : 0;
        $user_info[$k]['id'] = $param['id'];
        $user_info[$k]['sequence_id'] = $v->sequence_id;
        $sms = SmsCrontabConfig::model()->find('id=:id and status=1', array('id' => $param['id']));
        $sms->uptime = time();
        $sms->save();
        self::SendReward($user_info, $param);
    }

}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值