不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点

代码:

  1. <?php
  2. $list = array(
  3. array('id'=>1, 'pid'=>0, 'deep'=>0, 'name'=>'test1'),
  4. array('id'=>2, 'pid'=>1, 'deep'=>1, 'name'=>'test2'),
  5. array('id'=>3, 'pid'=>0, 'deep'=>0, 'name'=>'test3'),
  6. array('id'=>4, 'pid'=>2, 'deep'=>2, 'name'=>'test4'),
  7. array('id'=>5, 'pid'=>2, 'deep'=>2, 'name'=>'test5'),
  8. array('id'=>6, 'pid'=>0, 'deep'=>0, 'name'=>'test6'),
  9. array('id'=>7, 'pid'=>2, 'deep'=>2, 'name'=>'test7'),
  10. array('id'=>8, 'pid'=>5, 'deep'=>3, 'name'=>'test8'),
  11. array('id'=>9, 'pid'=>3, 'deep'=>2, 'name'=>'test9'),
  12. );
  13. function resolve($list) {
  14. $newList = $manages = $deeps = $inDeeps = array();
  15. foreach ($list as $row) {
  16. $newList[$row['id']] = $row;
  17. }
  18. $list = null;
  19. foreach ($newList as $row) {
  20. if (! isset($manages[$row['pid']]) || ! isset($manages[$row['pid']]['children'][$row['id']])) {
  21. if ($row['pid'] > 0 && ! isset($manages[$row['pid']]['children'])) $manages[$row['pid']] = $newList[$row['pid']];
  22. $manages[$row['pid']]['children'][$row['id']] = $row;
  23. }
  24. if (! isset($inDeeps[$row['deep']]) || ! in_array($row['id'], $inDeeps[$row['deep']])) {
  25. $inDeeps[$row['deep']][] = array($row['pid'], $row['id']);
  26. }
  27. }
  28. krsort($inDeeps);
  29. array_shift($inDeeps);
  30. foreach ($inDeeps as $deep => $ids) {
  31. foreach ($ids as $m) {
  32. // 存在子栏目的进行转移
  33. if (isset($manages[$m[1]])) {
  34. $manages[$m[0]]['children'][$m[1]] = $manages[$m[1]];
  35. $manages[$m[1]] = null;
  36. unset($manages[$m[1]]);
  37. }
  38. }
  39. }
  40. return $manages[0]['children'];
  41. }

递归实现

  1. function resolve2(& $list, $pid = 0) {
  2. $manages = array();
  3. foreach ($list as $row) {
  4. if ($row['pid'] == $pid) {
  5. $manages[$row['id']] = $row;
  6. $children = resolve2($list, $row['id']);
  7. $children && $manages[$row['id']]['children'] = $children;
  8. }
  9. }
  10. return $manages;
  11. }

PHP不使用递归的无限级分类的更多相关文章

  1. thinkphp框架中使用递归实现无限级分类

    无限级分类在我们开发中显得举足轻重,会经常被人问到,而一般会用递归的方法来实现,但是递归又会难倒一批人.今天博主分享的这个稍微有点基础的phper都能学会,希望大家能喜欢. 一.先建立对应的数据库和表 ...

  2. (实用篇)PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  3. PHP迭代与递归实现无限级分类

    无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 $arr = [ 1=>['id'=>1,'name'=>'父1','father'=& ...

  4. PHP递归实现无限级分类

    在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...

  5. php递归实现无限级分类树

      作者: PHP中文网|标签:PHP 递归 无限级树|2017-5-18 18:09   无限级树状图可以说是无限级栏目的一个显著特征,我们接下来就来看看两种不同的写法. 一.数据库设计 1 2 3 ...

  6. PHP 递归读取无限级分类

    /** * [获取第一级分类] * 20170829 * * @return array */ public function getCateList(){ $this->catelog = [ ...

  7. PHP递归重新排序无限级分类数组

    public static function Menus($id,$spac=0){ /* $data = array( 1 => array('id' => 1,'name' => ...

  8. PHP无限级分类的实现(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在 ...

  9. PHP+MySQL无限级分类(非递归)

    要实现无限级分类,递归一般是第一个也是最容易想到的,但是递归一般被认为占用资源的方法,所以很多系统是不考虑使用递归的 本文还是通过数据库的设计,用一句sql语句实现 数据库字段大概如下: 字段 说明 ...

随机推荐

  1. 活动图activity diagram

    活动图activity diagram 系列文章 [UML]UML系列——用例图Use Case [UML]UML系列——用例图中的各种关系(include.extend) [UML]UML系列——类 ...

  2. 类图class的依赖关系

    类图class的依赖关系 相关文章          [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       ...

  3. mac在线恢复教程

    上个周,我本来想升级一下Xcode,可是我的系统是10.8de,xcode5.0.1 最低支持10.8.4 所以就想升级一下我的mac的系统,可是因为我的appstore 是从别人的电脑上考过来的,要 ...

  4. Django 中的 WSGI

    Django 源码小剖: Django 中的 WSGI 2013-09-06 22:31 by 捣乱小子, 334 阅读, 0 评论, 收藏, 编辑 Django 其内部已经自带了一个方便本地测试的小 ...

  5. SoapUI调用Web服务

    msg = string.Empty; //string sendAddr, string destAddr, string smContent, int IsNeedreport, DateTime ...

  6. 利用ie的behavior属性兼容css3的一些属性

    behavior是从Internet Explorer 5开始引入的,是一种通过使用 CSS 向 HTML 元素添加行为的方法. 但是只有 Internet Explorer 支持 behavior ...

  7. ASP.NET Web安装程序

    键发布ASP.NET Web安装程序,搞WebForm的童鞋看过来... 前言:最近公司有个Web要发布,但是以前都是由实施到甲方去发布,配置,这几天有点闲,同事让我搞一个一键发布,就和安装软件那样的 ...

  8. Python自动化测试 -ConfigParser模块读写配置文件

    C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很简单的直接写程序了,不需要做如何配置. 对新手来说,这是非常好的“初体验”, 会激发初学者的自信和兴趣. 而有些语言的开发环 ...

  9. Django入门实践(一)

    Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...

  10. sqlserver生成随机数 2011-12-21 15:47 QQ空间

    -创建视图 create view myview as select re=rand() --自定义函数:取得指定范围的随机数 create function mydata( @a int, @b i ...