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 相关文章推荐
PHP4实际应用经验篇(5)
Oct 09 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
php 5.3.5安装memcache注意事项小结
Apr 12 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
使用swoole扩展php websocket示例
Feb 13 PHP
PHP入门之常量简介和系统常量
May 12 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
php倒计时出现-0情况的解决方法
Jul 28 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
PHP PDOStatement::execute讲解
Jan 31 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
上海牌131型七灯四波段四喇叭一级收音机
2021/03/02 无线电
PHP提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
PHP实现微信网页授权开发教程
2016/01/19 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
2014/02/26 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
微信小程序如何获取用户收货地址
2018/11/27 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
微信小程序登陆注册功能的实现代码
2019/12/10 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
2020/02/07 Javascript
[01:08:44]NB vs VP 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
如何在C# winform中异步调用web services
2015/09/21 面试题
授权委托书格式模板
2014/04/03 职场文书
党代会心得体会
2014/09/04 职场文书
死亡证明书样本说明
2014/10/18 职场文书
通用员工手册范本
2015/05/14 职场文书
导游词之镜泊湖
2019/12/09 职场文书
Nginx反向代理、重定向
2022/04/13 Servers