今天主要介绍一下使用递归来按层级查找数据。
原理挺简单的,主要是通过父级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