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脚本的10个技巧(1)
Oct 09 PHP
用php+mysql一个名片库程序
Oct 09 PHP
php 编写安全的代码时容易犯的错误小结
May 20 PHP
php防止SQL注入详解及防范
Nov 12 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
php生成数字字母的验证码图片
Jul 14 PHP
如何使用纯PHP实现定时器任务(Timer)
Jul 31 PHP
php搜索文件程序分享
Oct 30 PHP
详解php中反射的应用
Mar 15 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 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 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
php获取微信基础接口凭证Access_token
2018/08/23 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
mac中利用NVM管理不同node版本的方法详解
2017/11/08 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
Python创建系统目录的方法
2015/03/11 Python
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
查看python下OpenCV版本的方法
2018/08/03 Python
Win10下python3.5和python2.7环境变量配置教程
2018/09/18 Python
详解python算法之冒泡排序
2019/03/05 Python
python flask安装和命令详解
2019/04/02 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
详解如何修改python中字典的键和值
2020/09/29 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
神经网络训练采用gpu设置的方式
2021/03/03 Python
和谐家庭事迹材料
2014/12/20 职场文书
教师岗位职责范本
2015/04/02 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
2015年暑假生活总结
2015/07/13 职场文书