当前位置:首页 > 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. { 
  8.  static $child = []; // 定义存储子级数据数组 
  9.  foreach ($data as $key => $value) { 
  10.   if ($value['pid'] == $pid) { 
  11.    $child[] = $value; // 满足条件的数据添加进child数组 
  12.    unset($data[$key]); // 使用过后可以销毁 
  13.    $this->recursion($data, $value['id']); // 递归调用,查找当前数据的子级 
  14.   } 
  15.  } 
  16.  return $child; 
  17. } 

得到结果:

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

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

分享到: