PHP使用递归按层级查找数据的方法
今天主要介绍一下使用递归来按层级查找数据。
原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能。
1、首先查出要使用的数据组成一个数组(避免递归里查询数据库,之后根据这个数组组成自己需要的数据就可以了)
比如得到如下数据:
$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、接下来使用递归重组数据,使数据按层级显示。
/**
*根据父级id查找子级数据
*@param$data要查询的数据
*@paramint$pid父级id
*/
publicfunctionrecursion($data,$pid=0)
{
static$child=[];//定义存储子级数据数组
foreach($dataas$key=>$value){
if($value['pid']==$pid){
$child[]=$value;//满足条件的数据添加进child数组
unset($data[$key]);//使用过后可以销毁
$this->recursion($data,$value['id']);//递归调用,查找当前数据的子级
}
}
return$child;
}
得到结果:
[
{
"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使用递归按层级查找数据的方法,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。