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中Smarty模板初体验
Aug 08 PHP
php中使用接口实现工厂设计模式的代码
Jun 17 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php异步多线程swoole用法实例
Nov 14 PHP
深入理解PHP内核(一)
Nov 10 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
Feb 10 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
yii2安装详细流程
May 23 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
Oct 09 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 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
实用函数3
2007/11/08 PHP
对比分析php中Cookie与Session的异同
2016/02/19 PHP
javascript 最常用的10个自定义函数[推荐]
2009/12/26 Javascript
jQuery asp.net 用json格式返回自定义对象
2010/04/07 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
深入探寻seajs的模块化与加载方式
2015/04/14 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
angular中使用Socket.io实例代码
2017/06/03 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
2018/06/19 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
python进阶教程之异常处理
2014/08/30 Python
Python随手笔记第一篇(2)之初识列表和元组
2016/01/23 Python
python之拟合的实现
2019/07/19 Python
python性能测量工具cProfile使用解析
2019/09/26 Python
详解Python 循环嵌套
2020/07/09 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
小学教师的个人自我鉴定
2013/10/24 职场文书
好邻里事迹材料
2014/01/16 职场文书
财务管理职业生涯规划书
2014/02/26 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
党员进社区活动总结
2015/05/07 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
安全责任协议书范本
2016/03/23 职场文书
2016年学生会感恩节活动总结
2016/04/01 职场文书
Django如何创作一个简单的最小程序
2021/05/12 Python