因项目需要需要统计用户无限下级计算分销佣金,计算每月分红,计算无限下级团队的业绩,需要先获得某个会员的无限下级成员。先看看数据库中的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);
PHP的session文件夹默认保存在同一个文件,随着访客的增多,访问的速度会非常慢,例如部分管理系统后台每天登陆1000次,1个月就创建了30000个session文件,一年后是多少?假设这个系统的用户是上万人呢?方法1:每个网站使用自己的session文件夹,代码如下:<?php $pat...
源码:特别适用于微信支付中通知微信支付网关function array2xml($arr, $level = 1) { $s = $level == 1 ? "<xml&g...
php官方的超全局变量$_SERVER['PHP_SELF']也能直接获取,只不过如果url参数太多也会获取。下面提供一个方法获取/* * 获取当前PHP文件名称 */ if (!function_exists('phpself...
主要原理是通过PHP创建多个子进程,在子进程中发送进程闹钟信号,然后再监听闹钟信号中继续发送闹钟信号。同时通过父进程设置非阻塞运行。代码如下:<?php /** * 订单任务 */ class Order { &n...
在使用ftok生成ipc进程通信key尝试将第二个参数项目标识符传入字符串报错:PHP Warning: ftok(): Project identifier is invalid,查阅资料发现第二个字符串只能是1个字符串,长度为1....
有时候我们需要爬一个接口,但是这个接口需要很多参数,包括header和cookie要去编写,使用php curl模拟实在太慢。我们可以通过浏览器的network来复制请求为curl命令。例如我需要模拟请求接口地址:https://www.xkmz.cc/Ajax/Debug/delly,我们只需要在...