[[IT知识]] PHP实现万级用户关系树的高效构建与优化

[复制链接]
查看: 39|回复: 0
发表于 2025-2-9 09:10:00 | 显示全部楼层 | 阅读模式
易博V9下载

PHP实现万级用户关系树的高效构建与优化

  1. // mysql查询结果集类似于这样的二维数组, p_user_id 标记为上级用户ID, 无限级
  2. array: [
  3. 0 => array:3 [
  4. "id" => "0"
  5. "name" => "小赵"
  6. "p_user_id" => ""
  7. ],
  8. 1 => array:3 [
  9. "id" => "100"
  10. "name" => "小钱"
  11. "p_user_id" => "0"
  12. ],
  13. 2 => array:3 [
  14. "id" => "1000"
  15. "name" => "小孙"
  16. "p_user_id" => "100"
  17. ],
  18. 3 => array:3 [
  19. "id" => "10000"
  20. "name" => "小李"
  21. "p_user_id" => "1000"
  22. ],
  23. ……
  24. ]
复制代码
  1. // 将ID作为key,重组数组
  2. $users = array_column($res,null,'id');
  3. $result = [];
  4. // 找出每个用户的下级
  5. foreach($users as $id => $item)
  6. {
  7. $result[$item['p_user_id']][] = $item;
  8. }
  9. // 遍历成树状结构数组
  10. $tree = $this->createTree($result, [$users[0]]);
  11. // 如果需要用到类似于echart中树状结构图表,则移除不需要的key
  12. $data = $this->removeKeys($tree);
  13. // 最终echart中需要的json数组
  14. $treeJson = json_encode($data);
复制代码
  1. /
  2. * 二维数组转树状结构数组
  3. */
  4. public function createTree(&$list, $parent){
  5. $tree = array();
  6. foreach ($parent as $k=>$l){
  7. if(isset($list[$l['id']])){
  8. $l['children'] = $this->createTree($list, $list[$l['id']]);
  9. }
  10. $tree[] = $l;
  11. }
  12. return $tree;
  13. }
复制代码
  1. /
  2. * 移除不需要的key
  3. */
  4. public function removeKeys(&$arr)
  5. {
  6. foreach($arr as $key => &$item)
  7. {
  8. if(is_array($item))
  9. {
  10. unset($item['id']);
  11. unset($item['p_user_id']);
  12. if(isset($item['children']))
  13. {
  14. $this->removeKeys($item['children']);
  15. }
  16. }
  17. }
  18. return $arr;
  19. }
复制代码

本例中,万级用户关系,mysql一次找出所有用户字段,再PHP遍历,再移除多余字段,总耗时也就是1秒左右,不过echart展示这么大的结构太慢了,瓶颈在前台渲染上面。

如果针对指定用户异步查询上下级,则还是用ajax异步直接查询mysql比较合理。

易博软件介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表