今天主要介绍一下使用递归来按层级查找数据。
原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能。
1、首先查出要使用的数据组成一个数组(避免递归里查询数据库,之后根据这个数组组成自己需要的数据就可以了)
比如得到如下数据:
1
2
3
4
5
6
7
8
9
10
11
12
|
$data = [ [ 'id' => '1' , 'pid' => '0' , 'dsp' => '1' ], [ 'id' => '2' , 'pid' => '0' , 'dsp' => '2' ], [ 'id' => '3' , 'pid' => '0' , 'dsp' => '3' ], [ 'id' => '4' , 'pid' => '1' , 'dsp' => '1-4' ], [ 'id' => '5' , 'pid' => '4' , 'dsp' => '1-4-5' ], [ 'id' => '6' , 'pid' => '5' , 'dsp' => '1-4-5-6' ], [ 'id' => '7' , 'pid' => '3' , 'dsp' => '3-7' ], [ 'id' => '8' , 'pid' => '2' , 'dsp' => '2-8' ], [ 'id' => '9' , 'pid' => '1' , 'dsp' => '1-9' ], [ 'id' => '10' , 'pid' => '4' , 'dsp' => '1-4-10' ], ]; |
2、接下来使用递归重组数据,使数据按层级显示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
/** * 根据父级id查找子级数据 * @param $data 要查询的数据 * @param int $pid 父级id */ public function recursion( $data , $pid = 0) { static $child = []; // 定义存储子级数据数组 foreach ( $data as $key => $value ) { if ( $value [ 'pid' ] == $pid ) { $child [] = $value ; // 满足条件的数据添加进child数组 unset( $data [ $key ]); // 使用过后可以销毁 $this ->recursion( $data , $value [ 'id' ]); // 递归调用,查找当前数据的子级 } } return $child ; } |
得到结果:
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
|
[ { "id" : "1" , "pid" : "0" , "dsp" : "1" }, { "id" : "4" , "pid" : "1" , "dsp" : "1-4" }, { "id" : "5" , "pid" : "4" , "dsp" : "1-4-5" }, { "id" : "6" , "pid" : "5" , "dsp" : "1-4-5-6" }, { "id" : "10" , "pid" : "4" , "dsp" : "1-4-10" }, { "id" : "9" , "pid" : "1" , "dsp" : "1-9" }, { "id" : "2" , "pid" : "0" , "dsp" : "2" }, { "id" : "8" , "pid" : "2" , "dsp" : "2-8" }, { "id" : "3" , "pid" : "0" , "dsp" : "3" }, { "id" : "7" , "pid" : "3" , "dsp" : "3-7" } ] |
总结
以上所述是小编给大家介绍的PHP使用递归按层级查找数据的方法,希望对大家有所帮助!
原文链接:https://www.cnblogs.com/woods1815/archive/2019/11/10/11829453.html