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连mysql和oracle数据库性能比较
Oct 09 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php实现XSS安全过滤的方法
Jul 29 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
既简单又安全的PHP验证码 附调用方法
Jun 02 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
Python中使用django form表单验证的方法
Jan 16 PHP
thinkphp 字母函数详解T/I/N/D/M/A/R/U
Apr 03 PHP
php实现的二分查找算法示例
Jun 20 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
Jul 15 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
PHP接口类(interface)的定义、特点和应用示例
May 18 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里面的抽象类
2010/01/28 PHP
php导入导出excel实例
2013/10/25 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
PHP模板引擎Smarty内置变量调解器用法详解
2016/04/11 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
js调用flash的效果代码
2008/04/26 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
2010/01/02 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
jquery中attr和prop的区别分析
2015/03/16 Javascript
js实现交换运动效果的方法
2015/04/10 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
详解Django中的权限和组以及消息
2015/07/23 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
python 使用递归回溯完美解决八皇后的问题
2020/02/26 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Python Django view 两种return的实现方式
2020/03/16 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
浅析NumPy 切片和索引
2020/09/02 Python
2014年五四青年节活动策划书
2014/04/22 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
教师教育心得体会
2016/01/19 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS