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 相关文章推荐
简单采集了yahoo的一些数据
Feb 14 PHP
php zip文件解压类代码
Dec 02 PHP
PHP OPCode缓存 APC详细介绍
Oct 12 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
PHP空值检测函数与方法汇总
Nov 19 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 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
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP 日,周,月点击排行统计
2012/01/11 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
DB.ASP 用Javascript写ASP很灵活很好用很easy
2011/07/31 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
ES6使用let命令更简单的实现块级作用域实例分析
2017/03/31 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python中模块与包有相同名字的处理方法
2017/05/05 Python
django模板语法学习之include示例详解
2017/12/17 Python
python 字典中文key处理,读取,比较方法
2018/07/06 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python 正则表达式参数替换实例详解
2020/01/17 Python
jupyter 使用Pillow包显示图像时inline显示方式
2020/04/24 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
大四自我鉴定
2014/02/08 职场文书
《小石潭记》教学反思
2014/02/13 职场文书
精神文明单位申报材料
2014/05/02 职场文书
交通事故协议书范文
2014/10/23 职场文书
工作检讨书大全
2015/01/26 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
Python爬虫基础初探selenium
2021/05/31 Python
SpringAop日志找不到方法的处理
2021/06/21 Java/Android