PHP不使用递归的无限级分类简单实例


Posted in PHP onNovember 05, 2016

不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点

PHP不使用递归的无限级分类简单实例

代码:

<?php
$list = array(
  array('id'=>1, 'pid'=>0, 'deep'=>0, 'name'=>'test1'),
  array('id'=>2, 'pid'=>1, 'deep'=>1, 'name'=>'test2'),
  array('id'=>3, 'pid'=>0, 'deep'=>0, 'name'=>'test3'),
  array('id'=>4, 'pid'=>2, 'deep'=>2, 'name'=>'test4'),
  array('id'=>5, 'pid'=>2, 'deep'=>2, 'name'=>'test5'),
  array('id'=>6, 'pid'=>0, 'deep'=>0, 'name'=>'test6'),
  array('id'=>7, 'pid'=>2, 'deep'=>2, 'name'=>'test7'),
  array('id'=>8, 'pid'=>5, 'deep'=>3, 'name'=>'test8'),
  array('id'=>9, 'pid'=>3, 'deep'=>2, 'name'=>'test9'),
);
function resolve($list) {
  $newList = $manages = $deeps = $inDeeps = array();
  foreach ($list as $row) {
    $newList[$row['id']] = $row;
  }
  $list = null;
  foreach ($newList as $row) {
    if (! isset($manages[$row['pid']]) || ! isset($manages[$row['pid']]['children'][$row['id']])) {
      if ($row['pid'] > 0 && ! isset($manages[$row['pid']]['children'])) $manages[$row['pid']] = $newList[$row['pid']];
      $manages[$row['pid']]['children'][$row['id']] = $row;
    }
    if (! isset($inDeeps[$row['deep']]) || ! in_array($row['id'], $inDeeps[$row['deep']])) {
      $inDeeps[$row['deep']][] = array($row['pid'], $row['id']);
    }
  }
  krsort($inDeeps);
  array_shift($inDeeps);
  foreach ($inDeeps as $deep => $ids) {
    foreach ($ids as $m) {
      // 存在子栏目的进行转移
      if (isset($manages[$m[1]])) {
        $manages[$m[0]]['children'][$m[1]] = $manages[$m[1]];
        $manages[$m[1]] = null;
        unset($manages[$m[1]]);
      }
    }
  }
  return $manages[0]['children'];
}

递归实现

function resolve2(& $list, $pid = 0) {
  $manages = array();
  foreach ($list as $row) {
    if ($row['pid'] == $pid) {
      $manages[$row['id']] = $row;
      $children = resolve2($list, $row['id']);
      $children && $manages[$row['id']]['children'] = $children;
    }
  }
  return $manages;
}

以上这篇PHP不使用递归的无限级分类简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
记录mysql性能查询过程的使用方法
May 02 PHP
php include和require的区别深入解析
Jun 17 PHP
php全角字符转换为半角函数
Feb 07 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php获得文件大小和文件创建时间的方法
Mar 13 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
浅谈PHP中output_buffering
Jul 13 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
laravel框架中表单请求类型和CSRF防护实例分析
Nov 23 PHP
php  单例模式详细介绍及实现源码
Nov 05 #PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 #PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 #PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 #PHP
支付宝支付开发――当面付条码支付和扫码支付实例
Nov 04 #PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 #PHP
php array_slice 取出数组中的一段序列实例
Nov 04 #PHP
You might like
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
利用PHP扩展Xhprof分析项目性能实践教程
2018/09/05 PHP
phpwind放自动注册方法
2006/12/02 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
50个比较实用jQuery代码段
2011/09/18 Javascript
jQuery学习笔记 获取jQuery对象
2012/09/19 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
微信小程序 页面跳转如何实现传值
2017/04/05 Javascript
移动端手指放大缩小插件与js源码
2017/05/22 Javascript
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
Python中getattr函数和hasattr函数作用详解
2016/06/14 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
10分钟教你用python动画演示深度优先算法搜寻逃出迷宫的路径
2019/08/12 Python
django创建简单的页面响应实例教程
2019/09/06 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
Discard Protocol抛弃协议的作用是什么
2015/10/10 面试题
食品流通安全承诺书
2014/05/22 职场文书
驾驶员安全责任书
2014/07/22 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
求职自我评价范文
2015/03/09 职场文书
五年级作文之想象作文
2019/10/30 职场文书
Nginx进程管理和重载原理详解
2021/04/22 Servers
详解Django的MVT设计模式
2021/04/29 Python