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查询域名状态whois的类
Nov 25 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
使用php判断浏览器的类型和语言的函数代码
Feb 28 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
laravel框架 laravel-admin上传图片到oss的方法
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
PHP开发负载均衡指南
2010/07/17 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
Javascript 函数对象的多重身份
2009/06/28 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
总结JavaScript设计模式编程中的享元模式使用
2016/05/21 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
python实现学生信息管理系统
2020/04/05 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
python3实现简单飞机大战
2020/11/29 Python
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
厨师岗位职责
2013/11/12 职场文书
往来会计岗位职责
2013/12/19 职场文书
《雷雨》教学反思
2014/02/20 职场文书
超市中秋节促销方案
2014/03/21 职场文书
物理教育专业求职信
2014/06/25 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
财产分割协议书范本
2014/11/03 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
2015年党总支工作总结
2015/05/25 职场文书
植物园观后感
2015/06/11 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
python manim实现排序算法动画示例
2022/08/14 Python