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.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容