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的GROUP_CONCAT()函数使用方法
Mar 28 PHP
介绍php设计模式中的工厂模式
Jun 12 PHP
PHP 中文乱码解决办法总结分析
Jul 30 PHP
PHP通过header实现文本文件下载的代码
Aug 08 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
利用PHP+JS实现搜索自动提示(实例)
Jun 09 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
May 13 PHP
帝国cms目录结构分享
Jul 06 PHP
PHP闭包函数传参及使用外部变量的方法
Mar 15 PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 PHP
PHP Ajax实现无刷新附件上传
Aug 17 PHP
php使用fullcalendar日历插件详解
Mar 06 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
php框架Phpbean说明
2008/01/10 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
PHP多维数组排序array详解
2017/11/21 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
phpwind放自动注册方法
2006/12/02 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
JS求平均值的小例子
2013/11/29 Javascript
简单的代码实现jquery定时器
2014/01/03 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
2015/09/27 Javascript
Bootstrap每天必学之基础排版
2015/11/20 Javascript
require.js配合插件text.js实现最简单的单页应用程序
2016/07/12 Javascript
Bootstrap栅格系统学习笔记
2016/11/25 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
webpack实现热更新(实施同步刷新)
2017/07/28 Javascript
jQuery实现的点击图片居中放大缩小功能示例
2019/01/16 jQuery
javascript 使用sleep函数的常见方法详解
2020/04/26 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
干部作风建设个人剖析材料
2014/10/11 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android
el-form每行显示两列底部按钮居中效果的实现
2022/08/05 HTML / CSS