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

 更新时间:2019年11月10日 13:42:56   作者:幽篁晓筑  
这篇文章主要介绍了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  要查询的数据
 * @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;
}

得到结果:


[
 {
 "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使用递归按层级查找数据的方法,希望对大家有所帮助!

相关文章

  • PHP利用超级全局变量$_GET来接收表单数据的实例

    PHP利用超级全局变量$_GET来接收表单数据的实例

    下面小编就为大家带来一篇PHP利用超级全局变量$_GET来接收表单数据的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Yii框架关联查询with用法分析

    Yii框架关联查询with用法分析

    这篇文章主要介绍了Yii框架关联查询with用法,以实例形式较为详细的分析了yii支持的四种类型关系的具体用法,是使用yii框架进行关联查询时非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • PHP创建多级目录的两种方法

    PHP创建多级目录的两种方法

    本文给大家分享两种php创建多级目录的方法,分别是使用递归思想和直接利用mkdir创建。具体创建方法,大家可以参考本教程学习下
    2016-10-10
  • Laravel 框架返回状态拦截代码

    Laravel 框架返回状态拦截代码

    今天小编就为大家分享一篇Laravel 框架返回状态拦截代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • python进程与线程小结实例分析

    python进程与线程小结实例分析

    本文通过实例代码分析了python进程与线程知识小结,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-11-11
  • php获取301跳转URL简单实例

    php获取301跳转URL简单实例

    这篇文章主要介绍了php获取301跳转URL简单实例,有需要的朋友可以参考一下
    2013-12-12
  • Yii扩展组件编写方法实例分析

    Yii扩展组件编写方法实例分析

    这篇文章主要介绍了Yii扩展组件编写方法,实例分析了Yii框架下扩展组件的实现技巧,需要的朋友可以参考下
    2015-06-06
  • yii2利用自带UploadedFile实现上传图片的示例

    yii2利用自带UploadedFile实现上传图片的示例

    本篇文章主要介绍了yii2利用自带UploadedFile实现上传图片的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • php微信公众号开发之二级菜单

    php微信公众号开发之二级菜单

    这篇文章主要为大家详细介绍了php微信公众号开发之二级菜单,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • ThinkPHP中泛域名部署的实现方法

    ThinkPHP中泛域名部署的实现方法

    对于需要部署多个网站的开发者来说,站群架构是一种广泛采用的设计模式,而泛域名部署则是站群架构中比较常见的实现方式之一,在这篇文章中,我们将介绍如何在ThinkPHP框架中实现泛域名部署站群,需要的朋友可以参考下
    2024-04-04

最新评论