加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 21:24:19 所属栏目:PHP教程 来源:网络整理
导读:? 今天主要介绍一下使用递归来按层级查找数据。 原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容易实现,不过如果层级越多,PHP重复代码也越多,这时可以使用递归来实现这功能。 1、首先查出要使用的数据组成一个数组(避免递

?

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

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

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

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($value['id']);    递归调用,查找当前数据的子级
        }
    }
    return $child;
}

得到结果:

[
  {
    "id": "1","pid": "0","dsp": "1"
  },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","dsp": "1-4-10"
  {
    "id": "9","dsp": "1-9"
  {
    "id": "2","dsp": "2"
  {
    "id": "8","pid": "2","dsp": "2-8"
  {
    "id": "3","dsp": "3"
  {
    "id": "7","pid": "3","dsp": "3-7"
  }
]

?3、还可以使用下面的方法,显示更有层次感。

)
{
    ) {
            $value['child'] =  递归调用,查找当前数据的子级
             把子级数据添加进数组
 [
      {
        "id": "4","dsp": "1-4",1)"> [
          {
            "id": "5","dsp": "1-4-5",1)"> [
              {
                "id": "6","dsp": "1-4-5-6",1)"> []
              }
            ]
          },1)">
          {
            "id": "10","dsp": "1-4-10",1)"> []
          }
        ]
      },1)">
      {
        "id": "9","dsp": "1-9",1)"> []
      }
    ]
  },"dsp": "2",1)"> [
      {
        "id": "8","dsp": "2-8","dsp": "3",1)"> [
      {
        "id": "7","dsp": "3-7",1)"> []
      }
    ]
  }
]

?

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读