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


Posted in PHP onNovember 10, 2019

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

原理挺简单的,主要是通过父级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 相关文章推荐
php 删除无限级目录与文件代码共享
Nov 22 PHP
分享一个PHP数据流应用的简单例子
Jun 01 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 PHP
php桥接模式应用案例分析
Oct 23 PHP
php和js实现根据子网掩码和ip计算子网功能示例
Nov 09 #PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 #PHP
php进程(线程)通信基础之System V共享内存简单实例分析
Nov 09 #PHP
PHP多进程简单实例小结
Nov 09 #PHP
PHPUnit + Laravel单元测试常用技能
Nov 06 #PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 #PHP
基于thinkphp6.0的success、error实现方法
Nov 05 #PHP
You might like
用PHP创建PDF中文文档
2006/10/09 PHP
php中常用编辑器推荐
2007/01/02 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
php准确计算复活节日期的方法
2015/04/18 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
ie支持function.bind()方法实现代码
2012/12/27 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
js实现简单的验证码
2015/12/25 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
浅谈JavaScript的push(),pop(),concat()方法
2016/06/03 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
使用淘宝镜像cnpm安装Vue.js的图文教程
2018/05/17 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
详解Vue 项目中的几个实用组件(ts)
2019/10/29 Javascript
vue  elementUI 表单嵌套验证的实例代码
2019/11/06 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
python编程-将Python程序转化为可执行程序[整理]
2007/04/09 Python
python openssl模块安装及用法
2020/12/06 Python
几个常见的消息中间件(MOM)
2014/01/08 面试题
优秀团员个人的自我评价
2013/10/02 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
党的群众路线教育实践活动教师自我剖析材料
2014/10/09 职场文书
2014年检验科工作总结
2014/11/22 职场文书
物业公司管理制度
2015/08/05 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书