PHP递归获取数据
需求场景:通过公司某个部门的总监名称获取所有该部门的员工。
比如,通过总监获取所有副总监,再通过各个副总监获取所有各个副总监对应的经理,再通过经理获取对应经理的员工。
mysql的表结构这么设计的,总监的id是1,那么副总监的parent_id就是1,如果副总监的id分别是2、3、4、5等等,那么各个经理的parent_id就是2、3、4、5,依次类推形成一个递归的数据。
问1:PHP如何通过递归一次性把所有总监以下的数据保存到一个变量呢?
问2:取出数据后如何区分哪些是副总监哪些是经理哪些是一线员工呢?
问3:如何分页?(按照我的理解,即使是分页也需要把全部数据递归完毕之后再进行计算,而不是limit 1,10等形式分页)
问题有点多,还请各位大拿请教,多谢。
如下是我的代码。貌似死循环了。。。
public function recuresion($res)
{
foreach ($res as $k => $v)
{
$tmpRes[] = $this->obj->getResult($v['id']); //假设通过该方法获取副总监、经理、员工
if (!empty($tmpRes))
{
return $this->recuresion($tmpRes);
}
else
{
return $tmpRes;
}
}
}
$a = recuresion($res); //这里假设$res是获取的总监的数据
print_r($a);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
貌似纯 SQL 就能搞定,不需要 PHP 掺和……
问 1:
问 2:
外面再套一层就好了:
select * from (
问 1 的 SQL) e1 where not exists (select * from employee e2 where e2.parent_id = e1.id)
问 3:
既然是纯 SQL 的话,直接
limit
分页就好了。非要 PHP 的话:
呵呵,既然你有如此个性化的需求,就应该有一个性化的专用表, 在你的表里面再加一个字段,int level ,level这个字段意义就是相对于顶级分类,自己这条记录是属于第几级分类,
如:
总监 的level 是 0
副总监 的level 是 1
经理 的level是 2
.....
插入记录的时候,应该能够知道。父记录的level是多少,然后+1以后存进数据库。
这样子就楼主的问题就简单了,
1,所有总监以下的员工就是level非0的记录。
2,通过level可以分清楚员工的类型,
3,分页,还是通过limit 0,10 这种方法分。
手机码字,排版不方便,请自己慢慢看
$tmpRes[]?不清空的话这数组越来越大