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 根据IP地址控制访问的代码
Apr 22 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
php循环语句 for()与foreach()用法区别介绍
Sep 05 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
Jun 25 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
PHP MYSQL实现登陆和模糊查询两大功能
Feb 05 PHP
thinkPHP数据库增删改查操作方法实例详解
Dec 06 PHP
thinkPHP框架动态配置用法实例分析
Jun 14 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
关于PHP中interface的用处详解
Jul 26 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多进程编程实例
2014/10/15 PHP
php实现随机显示图片方法汇总
2015/05/21 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
鼠标滑在标题上显示图片的JS代码
2013/11/19 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
JS复制对应id的内容到粘贴板(Ctrl+C效果)
2017/01/23 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
JS实现canvas简单小画板功能
2020/06/23 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
Python读写Excel文件的实例
2013/11/01 Python
Python用GET方法上传文件
2015/03/10 Python
python学习数据结构实例代码
2015/05/11 Python
python使用正则表达式提取网页URL的方法
2015/05/26 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python中open函数的基本用法示例
2019/09/07 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
sort命令的作用和用法
2012/11/04 面试题
旅游管理毕业生自荐信范文
2014/03/19 职场文书
品牌推广策划方案
2014/05/28 职场文书
药品营销策划方案
2014/06/15 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python