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 相关文章推荐
oracle资料库函式库
Oct 09 PHP
php Undefined index和Undefined variable的解决方法
Mar 27 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
PHP使用DES进行加密与解密的方法详解
Jun 06 PHP
php导出excel格式数据问题
Mar 11 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
php求数组全排列,元素所有组合的方法总结
Mar 14 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
php微信开发之关注事件
Jun 14 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+mysql事务rollback&amp;commit示例
2010/02/08 PHP
web server使用php生成web页面的三种方法总结
2013/10/28 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
PHP内置过滤器FILTER使用实例
2014/06/25 PHP
Firefox div高度自适应
2009/04/28 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
2017/07/25 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
Python 初始化多维数组代码
2008/09/06 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
Python 实现随机数详解及实例代码
2017/04/15 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Python中单例模式总结
2018/02/20 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
Pandas时间序列基础详解(转换,索引,切片)
2020/02/26 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
python怎么判断素数
2020/07/01 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
东方红海科技面试题软件测试方面
2012/02/08 面试题
中科软笔试题和面试题
2014/10/07 面试题
司马光教学反思
2014/02/01 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
预备党员自我评价范文
2015/03/04 职场文书
公司聚餐通知
2015/04/22 职场文书
春节随笔
2015/08/15 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
浅谈Python协程asyncio
2021/06/20 Python
Java日常练习题,每天进步一点点(38)
2021/07/26 Java/Android
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL