php 无限级分类 递归+sort排序 和 非递归

1 先总结非递归

数据表:

id name pid path
1 php 0 0
2 mysql 0 0
3 linux 0 0
4 php-基本语法 1 0-1
5 linux-磁盘分区 3 0-3
 1 <?php
 2
 3 $navArr = [
 4   [
 5       ‘name‘=>‘php‘,
 6       ‘id‘=>1,
 7       ‘pid‘=>0,
 8       ‘path‘=>‘0‘,
 9       ‘sort‘=>‘2‘,
10
11   ],
12     [
13         ‘name‘=>‘php-基础‘,
14         ‘id‘=>2,
15         ‘pid‘=>1,
16         ‘path‘=>‘0-1‘,
17         ‘sort‘=>‘2‘,
18
19     ],
20     [
21         ‘name‘=>‘php-面向对象‘,
22         ‘id‘=>5,
23         ‘pid‘=>1,
24         ‘path‘=>‘0-1‘,
25         ‘sort‘=>‘1‘,
26
27     ],
28     [
29         ‘name‘=>‘php-面向对象-属性‘,
30         ‘id‘=>6,
31         ‘pid‘=>5,
32         ‘path‘=>‘0-1-5‘,
33         ‘sort‘=>‘2‘,
34
35     ],
36     [
37         ‘name‘=>‘php-面向对象-访问权限‘,
38         ‘id‘=>7,
39         ‘pid‘=>5,
40         ‘path‘=>‘0-1-5‘,
41         ‘sort‘=>‘1‘,
42
43     ],
44     [
45         ‘name‘=>‘服务端‘,
46         ‘id‘=>3,
47         ‘pid‘=>0,
48         ‘path‘=>‘0‘,
49         ‘sort‘=>‘3‘,
50
51     ],
52     [
53         ‘name‘=>‘mysql‘,
54         ‘id‘=>4,
55         ‘pid‘=>0,
56         ‘path‘=>‘0‘,
57         ‘sort‘=>‘1‘,
58
59     ],
60     [
61         ‘name‘=>‘linux‘,
62         ‘id‘=>5,
63         ‘pid‘=>3,
64         ‘path‘=>‘0-3‘,
65         ‘sort‘=>‘3‘,
66
67     ],
68 ];
69
70 foreach($navArr as $k => &$item){
71     $num = substr_count($item[‘path‘],‘-‘);
72     $pre = $sortPath = ‘‘;
73     if($num >0)
74     {
75         $tree = ‘|‘.str_repeat(‘ -- ‘,$num).$item[‘name‘];
76     }else{
77         $tree = $item[‘name‘];
78         $sortPath = $item[‘sort‘];
79     }
80     $item[‘tree‘] = $tree;
81     $arr[] = $item[‘path‘].‘-‘.$item[‘id‘];
82 }
83
84 array_multisort($arr,SORT_STRING,$navArr);
85
86 foreach($navArr as $item2)
87 {
88     echo $item2[‘tree‘].‘<br/>‘;
89 }
90
91 

此无限级分类没有处理 分类排序有效,以后更改。

2 递归+排序

原文地址:https://www.cnblogs.com/liujie-php/p/10159378.html

时间: 2024-10-13 19:32:33

php 无限级分类 递归+sort排序 和 非递归的相关文章

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

1.实现原理 2.数据结构 3.输出ul列表形式 4.输出option列表形式 5. 查找某一分类的所有子类 6. 查找某一分类的所有父类 7. 相关函数 无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 在<无限级分类实现思路>一文中介绍了几种常见的实现方法,各有利弊.其中“改进前序遍历树”数据结构,便于输出和查询,但是在移动分类和常规理解上有些

Java 递归、尾递归、非递归 处理阶乘问题

n!=n*(n-1)! import java.io.BufferedReader; import java.io.InputStreamReader; /** * n的阶乘,即n! (n*(n-1)*(n-2)*...1). * 0!为什么=1,由于1!=1*0!.所以0!=1 * * @author stone * @date 2015-1-6 下午18:48:00 */ public class FactorialRecursion { static long fact(long n) {

递归如何转换成非递归

为什么要讲递归呢? 因为递归很复杂,需要很长时间,见识过很多例子,包括了解好多数据结构才能深刻体会到如何使用递归,有时候,我们也不知道是否可以使用还是不能使用递归,其实可以通过非递归思想去理解,然后通过递归算法来进行编程实现,都是一个很好的方向,递归的本质是栈. 递归一般使用栈和队列使用区别? 通过很多例子发现凡是使用深度优先都是使用递归算法,凡是使用层次遍历的使用的都是队列.这个让我们怎么理解,我个人发现一个小的情况就是,递归它一般都是有一定的关系的,如深度优先遍历,它都是一个结点和另外一个结

Java 递归、尾递归、非递归、栈 处理 三角数问题

import java.io.BufferedReader; import java.io.InputStreamReader; //1,3,6,10,15...n 三角数 /* * # 1 * ## 1+2 * ### 1+2+3 * #### 1+2+3+4 * ##### 1+2+3+4+5 * ...第1层为1, 第n层等于 n + (f(n-1)) */ public class TriangleNumber { static int triangle(int n) { if (n <

mysql无限级分类实现基于汇报关系的信息管理权限

汇报关系和家族族谱的实现类似,采用树的数据结构进行定义,树采用递归进行定义.即要嘛是一个根节点,要嘛是由一个根节点和其子树组成.OA中的汇报关系也采用这种结构(与树稍有不同),除董事长外,其他人有且只有一个非其本人的直接主管,董事长的直接主管和越级主管是其本人.从以上的定义其实可以看出,汇报关系类似树,但又与树并不完全相同.除董事长外,其他汇报关系均是树形结构.树形结构采用递归定义,如采用递归查询是非常耗时的操作.比如以下需求: 1.主管可以看到所有直线下属的绩效信息: 针对以上需求,我们提出三

非递归排序

转载:http://blog.csdn.net/feixiaoxing/article/details/6844826 作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差别是非常明显的.既然排序有这么好的效果,那么这篇博客中,我们就对排序算做一个总结. 按照我个人的理解,排序可以分为两种: 一种是非递归排序,它主要按照非递归的方法对数据进行排序,也就是说主要数据的移位和循环来完成: 另外一种就是递归方法,我们

一步一步写算法(之非递归排序)

原文:一步一步写算法(之非递归排序) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 在上面一篇博客当中,我们发现普通查找和排序查找的性能差别很大.作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差别是非常明显的.既然排序有这么好的效果,那么这篇博客中,我们就对排序算做一个总结. 按照我个人的理解,排序可以分为两种:一种是非递归排序,它主要按照非递归的

数据结构和算法学习六,之非递归排序

http://blog.csdn.net/feixiaoxing/article/details/6844826 在上面一篇博客当中,我们发现普通查找和排序查找的性能差别很大.作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差别是非常明显的.既然排序有这么好的效果,那么这篇博客中,我们就对排序算做一个总结. 按照我个人的理解,排序可以分为两种:一种是非递归排序,它主要按照非递归的方法对数据进行排序,也就是说主

高速排序 归并排序的非递归版本号 备忘

首先,归并排序,分治.递归解决小的范围.再合并两个有序的小范围数组,便得到整个有序的数组. 这是非常适合用递归来写的.至于非递归.便是从小到大.各个击破,从而使得整个数组有序.代码例如以下: void merge(vector<int> &A, int left, int mid, int right) { int i=left,j=mid+1; vector<int> tmp(right-left+1,0); int k=0; while(i<=mid&&a