平级返佣和差级返佣

332 阅读1分钟

今天帮别人写了一个算法,嗯,有以下几种规则
1、上级和当前级别不一致的话,反营业额的差级 ,返佣=上级营业额-当前级别的营业额
2、当前级别和上级平级的话,返佣固定值15,上级的上级也是平级的话反固定值5
3、每层只有2个人
第三条我们先不用管,因为只写的算法,所以查询我们也不用管,直接拿数组计算

下面的算法有三个优化点,看你们能否找到拉

<?php
 /*
"id":用户id,"level":用户等级,"superior_id":上级id,"sales":营业额
$Z=我和我所有的上级
*/
 $z='[{"id":1,"level":6,"superior_id":0,"sales":25},{"id":2,"level":5,"superior_id":1,"sales":20},{"id":3,"level":4,"superior_id":2,"sales":15},{"id":4,"level":4,"superior_id":3,"sales":15},{"id":5,"level":4,"superior_id":4,"sales":15},{"id":6,"level":3,"superior_id":5,"sales":10},{"id":7,"level":3,"superior_id":6,"sales":10},{"id":8,"level":3,"superior_id":7,"sales":10},{"id":9,"level":3,"superior_id":8,"sales":10},{"id":10,"level":3,"superior_id":9,"sales":10}]';

 $array=json_decode($z,true);
 echo("<pre>");
 
 //设置每一级别出现的次数
  $level[1]=0;
  $level[2]=0;
  $level[3]=0;
  $level[4]=0;
  $level[5]=0;
  $level[6]=0;
 $superior_id=9;
 //superior(查出来的数组,我的上级id,设置的每一级出现次数,固定的要返回的值)
 print_r(superior($array,$superior_id,$level,$array=[]))  ;
 
//根据id查询父级
function superior($z,$superior_id,$level=[],$array=[]){
     
 $peers1=2; //第一个同级返佣金额
 $peers2=1;//第二个同级返佣金额
    $user=[];
    $superior=[];
    //查出自己和上级信息
    foreach ($z as $key => $value) {
         if($value["id"]==$superior_id){
              $superior=$value;
             
         }else if($value["superior_id"]==$superior_id){
             $user=$value; 
             unset($z[$key]);
         }else{
             
         }
    }
    
     //判断是否有上级、没有返回信息
    // var_dump($user,$superior);die;
    if(!empty($user)&&!empty($superior)){
        $array[$superior['id']]["user_id"]=$user['id'];
        $array[$superior['id']]["superior_id"]=$superior['id'];
     
        if($superior['level']==$user['level']){
            $array[$superior['id']]["superior_level"]=$superior['level'];
            $array[$superior['id']]["user_level"]=$user['level'];
            
            $level[$superior['level']]++;
            if($level[$superior['level']]==1){
                //第一次平级
                 $array[$superior['id']]["reward"]=$peers1;
                 
            }else if($level[$superior['level']]==2){
                   //第二次平级
                 $array[$superior['id']]["reward"]=$peers2;
            }else if($level[$superior['level']]>2){
                //大于第二次没有返佣
                 $array[$superior['id']]["reward"]=0;
            } 
        }else{
             $array[$superior['id']]["superior_level"]=$superior['level'];
            $array[$superior['id']]["user_level"]=$user['level'];
            //计算级差
             $array[$superior['id']]["reward"]=$superior["sales"]-$user["sales"];
            
        }
       
        
      
       return  superior($z,$superior['superior_id'],$level,$array);
    }else{
        return $array;
    }
}

返回的结果就是我们需要返佣的账户和返佣金额
根据返回的数据,进行返佣