PHP递归实现无限级分类

发布 : 2019-06-02 分类 : 后端 浏览 :

导语

在我们日常开发中,经常会遇到一些需要无限级分类的情况,比如商城的菜单,省市区划分,其实这些功能需求都可以使用递归思想来解决,下面我们就通过代码来了解递归,实现无限级分类。

定义数组

1
2
3
4
5
6
7
8
9
10
$data = array(
array('id' => 1, 'name' => '裤子', 'pid' => 0),
array('id' => 2, 'name' => '帽子', 'pid' => 0),
array('id' => 3, 'name' => '短裤', 'pid' => 1),
array('id' => 4, 'name' => '长裤', 'pid' => 1),
array('id' => 5, 'name' => '红帽', 'pid' => 2),
array('id' => 6, 'name' => '礼帽', 'pid' => 2),
array('id' => 7, 'name' => '黑色短裤', 'pid' => 3),
array('id' => 8, 'name' => '白色短裤', 'pid' => 3),
);

定义函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function get_tree($arr = array(), $pid = 0)         //arr-需要处理的数据;pid-对应父级id(默认为顶级)
{
$tree = array();

foreach ($arr as $value) {
if ($value['pid'] == $pid) {
$value['children'] = $this->get_tree($arr, $value['id']);
if ($value['children'] == null) {
unset($value['children']);
}
$tree[] = $value;
}
}
return $tree;
}

调用函数

定义好递归函数之后,然后调用 get_tree 函数,会输出一下结果:

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
Array
(
[0] => Array
(
[id] => 1
[name] => 裤子
[pid] => 0
[children] => Array
(
[0] => Array
(
[id] => 3
[name] => 短裤
[pid] => 1
[children] => Array
(
[0] => Array
(
[id] => 7
[name] => 黑色短裤
[pid] => 3
)
[1] => Array
(
[id] => 8
[name] => 白色短裤
[pid] => 3
)
)
)

[1] => Array
(
[id] => 4
[name] => 长裤
[pid] => 1
)
)
)

[1] => Array
(
[id] => 2
[name] => 帽子
[pid] => 0
[children] => Array
(
[0] => Array
(
[id] => 5
[name] => 红帽
[pid] => 2
)
[1] => Array
(
[id] => 6
[name] => 礼帽
[pid] => 2
)
)
)
)

结语

递归思想是我们必须要掌握的编程技巧,在开发过程中面对有些需求是,我们使用递归可以大大提升我们的开发效率,赶紧去试试吧!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹