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 相关文章推荐
PHP之变量、常量学习笔记
Mar 27 PHP
PHP二维数组的去重问题解析
Jul 17 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
Jan 11 PHP
Zend Framework入门知识点小结
Mar 19 PHP
YII动态模型(动态表名)支持分析
Mar 29 PHP
PHP接口继承及接口多继承原理与实现方法详解
Oct 18 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
Jul 21 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
Aug 10 PHP
深入研究PHP中的preg_replace和代码执行
Aug 15 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 PHP
laravel开发环境homestead搭建过程详解
Jul 03 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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 网页过期时间的控制代码
2009/06/29 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
通过修改referer下载文件的方法
2008/05/11 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
Jquery为a标签的href赋值实现代码
2013/05/03 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
解决layer弹出层msg的文字不显示的问题
2019/09/11 Javascript
js实现动态时钟
2020/03/12 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
python实现保存网页到本地示例
2014/03/16 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python复数属性和方法运算操作示例
2017/07/21 Python
Python函数的返回值、匿名函数lambda、filter函数、map函数、reduce函数用法实例分析
2019/12/26 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
银行门卫岗位职责
2013/12/29 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
投标承诺书怎么写
2014/05/24 职场文书
公司董事长岗位职责
2014/06/08 职场文书
python实现图片批量压缩
2021/04/24 Python
Win11软件图标固定到任务栏
2022/04/19 数码科技