项目中有很多地方需要用到无限极分类,之前数据量比较少,用递归方法虽然慢但是还可以接受,但是现在的数据量接近4万,php处理递归比较吃亏,递归100次就已经很难跑动了,无奈之下又得选择其它的方法,引用。事实证明引用方式能快速的查询出所有的父子关系。

递归:function getTree($type, $data, $num, $set_dep, $dep = 1)

{

$arr = [];

foreach ($data as $key => $val) {

if ($dep >= $set_dep) {

break;

}

if ($val[$type . '_number'] == $num) {

if (empty($val[$type . '_number'])) {

break;

}

$val['level'] = $dep;

$val['children'] = $this->getTree($type, $data, $val['user_login'], $set_dep, $dep + 1);

$arr[] = $val;

}

}

return $arr;

}

引用:function get_tree_child($type, $list, $num)

{

$tree = array();

$packData = array();

foreach ($list as $data) {

$packData[$data['user_login']] = $data;

}

foreach ($packData as $key => $val) {

//判断是不是根节点,如果是那么就把根节点数组的引用赋给新数组

if ($val[$type . '_number'] == $num) {

$tree[] = &$packData[$key];

} else {

//子类数组赋值给父类数组中键为children的数组

$packData[$val[$type . '_number']]['children'][] = &$packData[$key];

}

}

return $tree;

}

php 引用 无限极分类,php 无限极分类(递归Or引用两种方法)相关推荐

  1. 分类与数值预测是预测问题的两种主要类型

    分类与数值预测是预测问题的两种主要类型

  2. 分类梨和苹果的两种方法

    分类键盘和鼠标只能用形态的方法,不能用元素的方法,因为键盘和鼠标的组成元素可能是相同的.键盘的组成元素并不能唯一特征的重现成键盘的形状.对于键盘和鼠标这类对象形态和组成元素并没有关系. 但分类梨和苹果 ...

  3. WCF服务引用的两种方法

    一.添加服务引用 在项目中单击右键,选择添加服务引用 出现如下的对话框 一般情况下,填写完下面的对话框就可以点击确定,生成代理类了,但有的时候,我们需要对代理类对特殊的设置,比如我们要生成异步操作,要 ...

  4. 判断一个数是否为素数的两种方法:质数又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因。最小的质数是2。

    一,由键盘输入一个数判断是否为素数(设一个数存放变量,将为0的代表非素数,为1的代表为素数) #include <stdio.h> int main() { int i,flag,numb ...

  5. html页面如何引用母版页,内容页面访问母版页控件的两种方法

    母版页是ASP.NET2.0新增的一个功能,使用它可以更方便.更快速的创建风格一致的应用程序..NET的母版页和Dreamweaver的模板非常的相似,但.NET的母版页更加强大,它除了能够实现创建风 ...

  6. 两种方法设置 .NET/C# 项目的编译顺序,而不影响项目之间的引用

    当 A 项目引用 B 项目,那么使用 Visual Studio 或者 MSBuild 编译 A 项目之前就会确保 B 项目已经编译完毕.通常我们指定这种引用是因为 A 项目确实在运行期间需要 B 项 ...

  7. 引用bootstrap的两种方法

    Bootstrap 是最受欢迎的 HTML.CSS 和 JS 框架,用于开发响应式布局.移动设备优先的 WEB 项目. 通过官网下载 bootstrap的官网 bootstrap的下载页面 下载boo ...

  8. CSS导入使用及引用的两种方法

    方法一<link rel="stylesheet" type="text/css" href="test.css"> 方法二&l ...

  9. vue如何在一个组件中引用另外一个组件并使用?有两种方法

    方法一:代码如下 <template><div><!-- 3.在template中就可以直接使用了 --><testComponent></tes ...

最新文章

  1. 新职业风口已至!人社部宣布这10个职业缺口近千万!
  2. 联想sr950配置raid卡_联想服务器ThinkSeverRAID卡设置教程
  3. ssh遇到port 22:No route to host
  4. AOP切入同类调用方法不起作用,AopContext.currentProxy()帮你解决这个坑
  5. win10系统excel2019单元格显示完整的年月日时分秒设置方法
  6. Base64加解密的实现方式
  7. 【itext学习之路】--5.对pdf进行盖章/签章/数字签名
  8. java tomcat重启linux_Linux下tomcat重启
  9. CSS基础必备知识点04
  10. 【UI设计师必备】可临摹精美的APP UI Kit模板
  11. 线程之线程同步(1)
  12. Photoshop插件-黑白(四)-脚本开发-PS插件
  13. pip install 时 WARNING: No metadata found in e:\anaconda\lib\site-packages 问题解决
  14. 【deepin 20.1】终端的介绍
  15. oracle显示连接超时,Oracle 12179:tns:连接超时的问题
  16. 微信开发 缓存Storage
  17. Lei ❤函数的初识
  18. 数字密码锁的详解之梳理F4总结系列逻辑篇(三)
  19. PADS(二)更多使用和实战总结
  20. 《单元测试》Junit5入门教程——非常详细,入门即精通

热门文章

  1. QGIS最受欢迎的20个插件
  2. Linux - 常用命令
  3. 在linux下安卸载tomcat,Linux下卸载与安装配置Tomcat
  4. 以太坊合并四大支柱重振生态信心
  5. openstack中关于报错AMQP5672拒绝连接问题
  6. AI特工诞生!美国中情局这样收集社交数据
  7. org.json解析JSON
  8. docker-solr-php业务模拟
  9. Android数据访问(一)——Asserts
  10. 读书笔记--数据治理之术