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 相关文章推荐
PHP5 的对象赋值机制介绍
Aug 02 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
php下载excel无法打开的解决方法
Dec 24 PHP
php不写闭合标签的好处
Mar 04 PHP
php实现的Captcha验证码类实例
Sep 22 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 PHP
PHP实现二维数组按某列进行排序的方法
Nov 18 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
Jun 19 PHP
PHP手机短信验证码实现流程详解
May 17 PHP
PHP ADODB实现分页功能简单示例
May 25 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
PHP 截取字符串专题集合
2010/08/19 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
js一组验证函数
2008/12/20 Javascript
My Desktop :) 桌面式代码
2008/12/29 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
javascript获取ckeditor编辑器的值(实现代码)
2013/11/18 Javascript
JS表的模拟方法
2015/02/05 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
Bootstrap每天必学之弹出框(Popover)插件
2016/04/25 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python 专题一 函数的基础知识
2017/03/16 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
The North Face意大利官网:服装、背包和鞋子
2020/06/17 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
linux系统都有哪些运行级别
2012/04/15 面试题
初一学生期末评语
2014/04/24 职场文书
售房协议书范本2014
2014/10/23 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
Python 多线程处理任务实例
2021/11/07 Python
pt-archiver 主键自增
2022/04/26 MySQL