因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的member表字段
id username agentid(上级id)
1 张三 0
2 李四 1
3 李四 2
4 王五 3
5 马六 4
.......................
1.递归模式(因为PHP在递归方面限制层级厉害,无限下级不建议采用)
private $members;//保存二级分享所有团队人员 /* * 计算某个用户无限下级. * 返回的数据并不包含用户自身. * $mid为某用户的id */ public function GetTeamMember($mid){ $Tempmerbers=pdo_fetchall("select id,openid from ". tablename('ewei_shop_member')." where agentid=".$mid);//查询id为mid的用户的直接下级 $this->members=array_merge($this->members,$Tempmerbers);//查询结果保存到私有属性members中 if(count($Tempmerbers)>0){//再将上面查询到的直接下级递归查询下级 foreach ($Tempmerbers as $value) { $this->GetTeamMember($value['id']); } } }
2.非递归模式
//1.整个会员表的数据 $member = array( array('id'=>1, 'agentid'=>0, 'nickname' => 'A'), array('id'=>2, 'agentid'=>1, 'nickname' => 'B'), array('id'=>3, 'agentid'=>1, 'nickname' => 'C'), array('id'=>4, 'agentid'=>8, 'nickname' => 'D'), array('id'=>5, 'agentid'=>3, 'nickname' => 'E'), array('id'=>6, 'agentid'=>3, 'nickname' => 'F'), array('id'=>7, 'agentid'=>3, 'nickname' => 'G'), array('id'=>8, 'agentid'=>8, 'nickname' => 'H') ); /* *2.获取某个会员的无限下级方法 *$members是所有会员数据表,$mid是用户的id */ function GetTeamMember($members, $mid) { $Teams=array();//最终结果 $mids=array($mid);//第一次执行时候的用户id do { $othermids=array(); $state=false; foreach ($mids as $valueone) { foreach ($members as $key => $valuetwo) { if($valuetwo['agentid']==$valueone){ $Teams[]=$valuetwo['id'];//找到我的下级立即添加到最终结果中 $othermids[]=$valuetwo['id'];//将我的下级id保存起来用来下轮循环他的下级 array_splice($members,$key,1);//从所有会员中删除他 $state=true; } } } $mids=$othermids;//foreach中找到的我的下级集合,用来下次循环 } while ($state==true); return $Teams; } $res=GetTeamMember($member ,1); var_dump($res);
/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $lati...
(1).学习的目标:学会创建父子进程,并且能够区分当前进程是父还是子;了解父进程执行过程,子进程执行过程;能够用多进程执行任务(2).相关函数学习: (2.1)pcntl_fork()执行时: &nbs...
参数中包含gb2312的字符串,返回结果是false或者null(不同PHP版本具有差异性)代码:<?php $dbms = 'mysql'; $host = '192.168.8.8'; $dbName =&n...
【一】.迭代器迭代是指反复执行一个过程,每执行一次叫做一次迭代。比如下面的代码就叫做迭代:1. <?php 2. $data = ['1', '2', &...
在使用ftok生成ipc进程通信key尝试将第二个参数项目标识符传入字符串报错:PHP Warning: ftok(): Project identifier is invalid,查阅资料发现第二个字符串只能是1个字符串,长度为1....
elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{ "require": { &...