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 相关文章推荐
用文本作数据处理
Oct 09 PHP
php jquery 实现新闻标签分类与无刷新分页
Dec 18 PHP
Linux下将excel数据导入到mssql数据库中的方法
Feb 08 PHP
ecshop 订单确认中显示省市地址信息的方法
Mar 15 PHP
php echo 输出字符串函数详解
May 13 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
thinkphp3查询mssql数据库乱码解决方法分享
Feb 11 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
使用PHP编写发红包程序
Jul 22 PHP
PHP基于IMAP收取邮件的方法示例
Aug 07 PHP
php通过header发送自定义数据方法
Jan 18 PHP
php 将json格式数据转换成数组的方法
Aug 21 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
法兰绒滤网冲泡
2021/03/03 冲泡冲煮
PHP验证码类ValidateCode解析
2017/01/07 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
浏览器无法运行JAVA脚本的解决方法
2008/01/09 Javascript
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
javascript 浏览器检测代码精简版
2010/03/04 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
Javascript核心读书有感之词法结构
2015/02/01 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
使用vux实现上拉刷新功能遇到的坑
2018/02/08 Javascript
js replace 全局替换的操作方法
2018/06/12 Javascript
create-react-app安装出错问题解决方法
2018/09/04 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python标准库与第三方库详解
2014/07/22 Python
python求解水仙花数的方法
2015/05/11 Python
分享一下如何编写高效且优雅的 Python 代码
2017/09/07 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
python 实现控制鼠标键盘
2020/11/27 Python
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
上班玩手机检讨书
2014/02/17 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
微信小程序实现轮播图指示器
2022/06/25 Javascript