今天帮别人写了一个算法,嗯,有以下几种规则
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;
}
}
返回的结果就是我们需要返佣的账户和返佣金额
根据返回的数据,进行返佣