Home  >  Article  >  Backend Development  >  php for 循环思路问题

php for 循环思路问题

WBOY
WBOYOriginal
2016-06-23 13:41:03836browse

我是PHP新手,最近开发项目求二叉树体系的福利奖。写完后执行效率太低。求高手大神指点一下思路。图片说明
1.左右业绩达到1W就是主管。 管理体系下有2个主管就是经理。管理体系下有2个经理就是董事。 0会员,1主管,2经理,3董事。
我写的代码如下:
//福利奖开始
unset($map);//销毁map变量值
$map['_string']=" datediff(curday,'".$beginday."') //查询所有会员业绩
$hyyjlist=$hyyj->where($map)->field(' userid,sum(leftyj1)+sum(leftyj2) as sumleft')->group('userid')->select();
$glrCountArry=array();//key:主管name+flrjl value:人数  保存主管人数的 数组
foreach ($hyyjlist as $hkey=>$hvalue){//循环更新用户的主管福利
if($hvalue['sumleft']>=10000){
$us=$userListArry[$hvalue['userid']];//3根据ID获得会员
if($us['flstate']==0){//状态是0 会员
if($salary1->where(array('periods'=>$periods,'userid'=>$us['id']))->setField(array('flj'=>'z主管奖内容z'))===false){
$salary->rollback();
$this->error('福利奖更新失败');
}
for(!empty($us['gluser']),$i=0;$i if(!array_key_exists($us['gluser']."flrzg", $glrCountArry)){
$glrCountArry[$us['gluser']."flrzg"]=1;
}else{
$glrCountArry[$us['gluser']."flrzg"]+=1;
}
$us=$userNameListArry[$us['gluser']];
if(empty($us)){
$i=count($userlist);
}
}
}
}
}
$find['state']=array('eq',1);//状态=1激活
$find['_string']="from_unixtime(confirmtime,'%Y-%m-%d') $list2=$users->where($find)->select();//查询会员列表
$glrCountArry2=array();// key:经理name+flrjl value:人数  保存经理人数的 数组
foreach ($list2 as $key=>$value){//获得经理福利
$us=$value;
if($us['flstate']==1){
for(!empty($us['gluser']),$i=0;$i if($glrCountArry[$us['username']."flrzg"]>0){//会员是主管级别,主管数组的人数大于0 更新会员的经理福利
if($salary1->where(array('periods'=>$periods,'userid'=>$us['id']))->setField(array('flj'=>'z经理奖内容z'))===false){
$salary->rollback();
$this->error('福利奖更新失败2');
}
}
if(!array_key_exists($us['gluser']."flrjl", $glrCountArry2)){//使会员的上层经理+1
$glrCountArry2[$us['gluser']."flrjl"]=1;
}else{
$glrCountArry2[$us['gluser']."flrjl"]+=1;
}
$us=$userNameListArry[$us['gluser']];
if(empty($us)){
$i=count($userlist);
}
}
}else if($value['flstate']==0){//会员等级不是主管,主管数组的人数大于1 更新会员的经理福利
for(!empty($us['gluser']),$i=0;$i if($glrCountArry[$us['username']."flrzg"]>1){//会员是主管级别,主管数组的人数大于0 更新会员的经理福利
if($salary1->where(array('periods'=>$periods,'userid'=>$us['id']))->setField(array('flj'=>'z经理奖内容z'))===false){
$salary->rollback();
$this->error('福利奖更新失败2');
}
}
if(!array_key_exists($us['gluser']."flrjl", $glrCountArry2)){//使会员的上层经理+1
$glrCountArry2[$us['gluser']."flrjl"]=1;
}else{
$glrCountArry2[$us['gluser']."flrjl"]+=1;
}
$us=$userNameListArry[$us['gluser']];
if(empty($us)){
$i=count($userlist);
}
}

}
}
foreach ($list2 as $key=>$value){//获得董事福利
$us=$value;
if($us['flstate']==2){//状态为2经理
for(!empty($us['gluser']),$i=0;$i if($glrCountArry2[$us['username']."flrjl"]>0){//会员是经理级别,经理数组的人数大于0 更新会员的董事福利
if($salary1->where(array('periods'=>$periods,'userid'=>$us['id']))->setField(array('flj'=>'z董事奖内容z'))===false){
$salary->rollback();
$this->error('福利奖更新失败3');
}
}
$us=$userNameListArry[$us['gluser']];
if(empty($us)){
$i=count($userlist);
}
}
}else if($value['flstate'] for(!empty($us['gluser']),$i=0;$i if($glrCountArry2[$us['username']."flrjl"]>1){//会员是经理级别,经理数组的人数大于1 更新会员的董事福利
if($salary1->where(array('periods'=>$periods,'userid'=>$us['id']))->setField(array('flj'=>'z董事奖内容z'))===false){
$salary->rollback();
$this->error('福利奖更新失败3');
}
}
$us=$userNameListArry[$us['gluser']];
if(empty($us)){
$i=count($userlist);
}
}
}
}
//福利奖结束


回复讨论(解决方案)

请用文字描述你的业务需求!
这样才可能知道你的代码的问题出在哪里?

就是会员推荐新人到他的名下,一个会员能推荐2个人,比如推荐一个人得1000元。 当他推荐的人的金额达到1W时,他就成了主管,就能拿主管奖。当他名下的人有2个主管时,他就是经理,拿经理奖。

表结构是怎样的?应该用 update 指令就可完成的

我写的思路是,循环所有会员,当他名下的业绩达到1W,这个会员拿主管奖。然后循环上层,使他上层的管理者都拿管理奖。然后再循环一次会员,当他名下有2个主管时他拿经理奖,然后循环他的上层都拿经理奖。
  现在问题是这个双重循环运行的效率太低,我8000条数据 运行了3分钟。怎么能优化下思路或者方法?

再说一遍。需要看到你的数据在表中是怎么存放的
因为可能是你的思路有问题

简单举下例子:         A  下有2个会员,注册会员需要1000元,他们的上层都得到注册的业绩。
                           B                 C  他们下边也有会员   
                     B1    B2     C1      C2                             会员等级划分:会员-》主管-》经理-》董事。
如果B1,B2,C1,C2注册成新会员,B的业绩就是2000,C的业绩是2000  ,A的业绩是6000,按人头数算的。
现在要做的功能是,会员的福利奖。当会员下的业绩=10000的时候,会员可以得到主管奖。当会员下有2个主管的时候,会员可以
得到经理奖。当会员名下有2个经理的时候,会员得到董事奖。
比如B1下的业绩达到1W,那么B1得到主管奖,B得到主管奖。A下有2个主管B,B1得到经理奖。以此类推。。。
我写的代码有问题,希望得到个思路,谢谢了。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn