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 相关文章推荐
Banner程序
Oct 09 PHP
快速开发一个PHP扩展图文教程
Dec 12 PHP
php 归并排序 数组交集
May 10 PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
Jul 08 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
PHP获取photoshop写入图片文字信息的方法
Mar 31 PHP
PHP使用星号隐藏用户名,手机和邮箱的实现方法
Sep 22 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 PHP
PHP单元测试配置与使用方法详解
Dec 27 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出错界面
2006/10/09 PHP
PHP 类相关函数的使用详解
2013/05/10 PHP
一个漂亮的php验证码类(分享)
2013/08/06 PHP
Yii获取当前url和域名的方法
2015/06/08 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
jquery移动节点实例
2015/01/14 Javascript
jQuery元素的隐藏与显示实例
2015/01/20 Javascript
AngularJS基础 ng-selected 指令简单示例
2016/08/03 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
3分钟快速搭建nodejs本地服务器方法运行测试html/js
2017/04/01 NodeJs
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
浅谈HTTP 缓存的那些事儿
2018/10/17 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
javascript数组的定义及操作实例
2019/11/10 Javascript
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
python中安装django模块的方法
2020/03/12 Python
Python实现图片指定位置加图片水印(附Pyinstaller打包exe)
2021/03/04 Python
Shein英国:女性时尚网上商店
2019/04/10 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
香港士多网上超级市场:Ztore
2021/01/09 全球购物
党委班子对照检查材料
2014/08/19 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
校园广播稿精选
2014/10/01 职场文书
租车协议书范本2014
2014/11/17 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP
Python下opencv库的安装过程及问题汇总
2021/06/11 Python