因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的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);
通常我们使用unset()删除数组的元素,数据的顺序并没有重置,使用array_merge()方法即可解决<?php $shoplist= array('a','b','c','d','e','...
第一步:服务端文件<?php $wsdlfile='webservice.wsdl'; ini_set('soap.wsdl_cache_enabled','0'); //关闭WSDL缓存 //001...
<?php $member = new class { public function getInfo() { ...
php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){ //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...
概念请参考w3school文章: redis watch ,redis exec (看完基本秒懂)(1)基本事务://连接本地的 Redis 服务 $redis = new Redis(); $redis->con...
elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{ "require": { &...