PHP使用递归按层级查找数据的方法
吾爱主题
阅读:128
2021-09-16 15:59:00
评论:0
今天主要介绍一下使用递归来按层级查找数据。
原理挺简单的,主要是通过父级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
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。