当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP使用递归按层级查找数据的方法

发布:smiling 来源: PHP粉丝网  添加日期:2022-01-21 21:00:07 浏览: 评论:0 

今天主要介绍一下使用递归来按层级查找数据。

原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能。

1、首先查出要使用的数据组成一个数组(避免递归里查询数据库,之后根据这个数组组成自己需要的数据就可以了)

比如得到如下数据:

  1. $data = [ 
  2.  ['id' => '1''pid' => '0''dsp' => '1'], 
  3.  ['id' => '2''pid' => '0''dsp' => '2'], 
  4.  ['id' => '3''pid' => '0''dsp' => '3'], 
  5.  ['id' => '4''pid' => '1''dsp' => '1-4'], 
  6.  ['id' => '5''pid' => '4''dsp' => '1-4-5'], 
  7.  ['id' => '6''pid' => '5''dsp' => '1-4-5-6'], 
  8.  ['id' => '7''pid' => '3''dsp' => '3-7'], 
  9.  ['id' => '8''pid' => '2''dsp' => '2-8'], 
  10.  ['id' => '9''pid' => '1''dsp' => '1-9'], 
  11.  ['id' => '10''pid' => '4''dsp' => '1-4-10'], 
  12. ]; 

2、接下来使用递归重组数据,使数据按层级显示。

  1. /** 
  2.  * 根据父级id查找子级数据 
  3.  * @param $data  要查询的数据 
  4.  * @param int $pid 父级id 
  5.  */ 
  6. public function recursion($data$pid = 0) 
  7.  static $child = []; // 定义存储子级数据数组 
  8.  foreach ($data as $key => $value) { 
  9.   if ($value['pid'] == $pid) { 
  10.    $child[] = $value// 满足条件的数据添加进child数组 
  11.    unset($data[$key]); // 使用过后可以销毁 
  12.    $this->recursion($data$value['id']); // 递归调用,查找当前数据的子级 
  13.   } 
  14.  } 
  15.  return $child

得到结果:

  1.  { 
  2.  "id""1"
  3.  "pid""0"
  4.  "dsp""1" 
  5.  }, 
  6.  { 
  7.  "id""4"
  8.  "pid""1"
  9.  "dsp""1-4" 
  10.  }, 
  11.  { 
  12.  "id""5"
  13.  "pid""4"
  14.  "dsp""1-4-5" 
  15.  }, 
  16.  { 
  17.  "id""6"
  18.  "pid""5"
  19.  "dsp""1-4-5-6" 
  20.  }, 
  21.  { 
  22.  "id""10"
  23.  "pid""4"
  24.  "dsp""1-4-10" 
  25.  }, 
  26.  { 
  27.  "id""9"
  28.  "pid""1"
  29.  "dsp""1-9" 
  30.  }, 
  31.  { 
  32.  "id""2"
  33.  "pid""0"
  34.  "dsp""2" 
  35.  }, 
  36.  { 
  37.  "id""8"
  38.  "pid""2"
  39.  "dsp""2-8" 
  40.  }, 
  41.  { 
  42.  "id""3"
  43.  "pid""0"
  44.  "dsp""3" 
  45.  }, 
  46.  { 
  47.  "id""7"
  48.  "pid""3"
  49.  "dsp""3-7" 
  50.  } 
  51. ]

Tags: PHP递归按层级查找数据

分享到: