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 和 XML: 使用expat函数(三)
Oct 09 PHP
Smarty Foreach 使用说明
Mar 23 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
深入PHP获取随机数字和字母的方法详解
Jun 06 PHP
解析php addslashes()与addclashes()函数的区别和比较
Jun 24 PHP
phplot生成图片类用法详解
Jan 06 PHP
php字符串按照单词进行反转的方法
Mar 14 PHP
PHP实现统计在线人数功能示例
Oct 15 PHP
laravel 5.3中自定义加密服务的方案详解
May 09 PHP
PHP验证码无法显示的原因及解决办法
Aug 11 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
PHP PDOStatement::fetchObject讲解
Feb 01 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提取中英文词语以及数字的首字母的方法介绍
2013/04/23 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
php封装一个异常的处理类
2017/06/08 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
php封装实现钉钉机器人报警接口的示例代码
2020/08/08 PHP
JQuery 学习笔记 选择器之一
2009/07/23 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
js常用自定义公共函数汇总
2014/01/15 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
webpack4 SCSS提取和懒加载的示例
2018/09/03 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
python中偏函数partial用法实例分析
2015/07/08 Python
python抽取指定url页面的title方法
2018/05/11 Python
Python设计模式之适配器模式原理与用法详解
2019/01/15 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
Python基于smtplib协议实现发送邮件
2020/06/03 Python
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
财务方面个人工作的自我评价
2013/12/28 职场文书
家居装修公司创业计划书范文
2014/03/20 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
单位租房协议范本
2014/12/03 职场文书
文化苦旅读书笔记
2015/06/29 职场文书
感恩教育主题班会
2015/08/12 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang