在web开发中,分类是极常见的功能。而无限极分类,顾名思义,就是按照层级无限进行分类。在前后端的交互过程中,要通过一定的方法来实现这种分类,而php的递归就是其中之一。
一、什么是递归
递归是指在程序运行过程中,调用自身的一种技巧。通过递归可以将复杂的问题简化为简单的问题,从而更好的解决问题。在php中使用递归,需要明确递归的两个要素:递归结束条件和递归表达式。
递归结束条件指的是递归何时停止的判断条件,这通常是指到达某个特定的深度、状态或者拥有某个特定的值。在递归的过程中,如果没有结束条件,程序将会陷入死循环。
递归表达式则是指在递归过程中,继续执行递归的操作。通常情况下,递归表达式是在递归函数内部,通过自我调用函数实现。
二、如何用递归实现无限极分类
我们可以使用递归来实现无限极分类。具体来说,我们可以定义一个递归函数,该函数接收一个参数,这个参数是一个数组,代表某一层级下的分类列表。函数内部进行递归操作,对每个分类依次进行遍历,如果这个分类有子分类,就通过递归函数对子分类进行遍历。在遍历结束后,返回整个分类数组。
具体实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
function infiniteCategory($data, $pid = 0, $level = 0)
{
static $result = array();
foreach ($data as $key => $value) {
if ($value[parent_id] == $pid) {
$value[level] = $level;
$result[] = $value;
infiniteCategory($data, $value[id], $level + 1);
}
}
return $result;
}
解析如下:
(1)该函数接收三个参数,一个是分类列表数组$data,一个是父级id默认为0的$pid,一个是层级默认为0的$level。
(2)定义一个静态变量,用于存储最终的分类结果。
(3)通过foreach循环遍历分类列表,如果某个分类的parent_id等于$pid,说明这个分类属于当前层级,将其加入到最终结果数组$result。
(4)然后调用递归函数,将当前分类的id作为$pid传入,$level+1作为下一级分类的层级。
(5)遍历结束后,返回结果数组。
下面来测试一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
$data = array(
array(id => 1, name => 电脑, parent_id => 0),
array(id => 2, name => 手机, parent_id => 0),
array(id => 3, name => 笔记本, parent_id => 1),
array(id => 4, name => 台式机, parent_id => 1),
array(id => 5, name => 智能手机, parent_id => 2),
array(id => 6, name => 非智能手机, parent_id => 2),
array(id => 7, name => 微型笔记本, parent_id => 3),
array(id => 8, name => 超级台式机, parent_id => 4),
array(id => 9, name => 小型台式机, parent_id => 4),
);
var_dump(infiniteCategory($data));
运行结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
array(9) {
[0]=>
array(4) {
[“id”]=>
int(1)
[“name”]=>
string(6) “电脑”
[“parent_id”]=>
int(0)
[“level”]=>
int(0)
}
[1]=>
array(4) {
[“id”]=>
int(3)
[“name”]=>
string(9) “笔记本”
[“parent_id”]=>
int(1)
[“level”]=>
int(1)
}
[2]=>
array(4) {
[“id”]=>
int(7)
[“name”]=>
string(15) “微型笔记本”
[“parent_id”]=>
int(3)
[“level”]=>
int(2)
}
[3]=>
array(4) {
[“id”]=>
int(4)
[“name”]=>
string(9) “台式机”
[“parent_id”]=>
int(1)
[“level”]=>
int(1)
}
[4]=>
array(4) {
[“id”]=>
int(9)
[“name”]=>
string(18) “小型台式机”
[“parent_id”]=>
int(4)
[“level”]=>
int(2)
}
[5]=>
array(4) {
[“id”]=>
int(8)
[“name”]=>
string(18) “超级台式机”
[“parent_id”]=>
int(4)
[“level”]=>
int(2)
}
[6]=>
array(4) {
[“id”]=>
int(2)
[“name”]=>
string(6) “手机”
[“parent_id”]=>
int(0)
[“level”]=>
int(0)
}
[7]=>
array(4) {
[“id”]=>
int(5)
[“name”]=>
string(12) “智能手机”
[“parent_id”]=>
int(2)
[“level”]=>
int(1)
}
[8]=>
array(4) {
[“id”]=>
int(6)
[“name”]=>
string(15) “非智能手机”
[“parent_id”]=>
int(2)
[“level”]=>
int(1)
}
}
可以看到,已经成功将分类列表转换成了无限极分类,根据level字段的值,可以看出每个分类所处的层级。
三、小结
通过递归实现无限极分类的方法,能够让我们在web开发中迅速完成分类功能,而且具有较高的灵活性。在使用递归时,需要注意结束条件的设置,否则可能陷入死循环。
以上就是php之递归实现无限极分类的详细内容,更多请关注php中文网其它相关文章!
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有佣金分成!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.77ym.top",如遇到无法解压的请联系管理员!
7. 本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
暂无评论内容