首页后端开发PHPPHP使用递归按层级查找数据(代码详解)

PHP使用递归按层级查找数据(代码详解)

时间2024-02-02 01:58:02发布访客分类PHP浏览99
导读:收集整理的这篇文章主要介绍了PHP使用递归按层级查找数据(代码详解),觉得挺不错的,现在分享给大家,也给大家做个参考。今天主要介绍一下使用递归来按层级查找数据。原理挺简单的,主要是通过父级id一级一级的循环查找子级,使用PHP循环代码也很容...
收集整理的这篇文章主要介绍了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"  }
    ]

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

/** * 根据父级id查找子级数据 * @param $data     要查询的数据 * @param int $pid 父级id */public function recursion($data, $pid = 0){
        $child = [];
       // 定义存储子级数据数组    foreach ($data as $key =>
 $value) {
        if ($value['pid'] == $pid) {
                unset($data[$key]);
      // 使用过后可以销毁            $value['child'] = $this->
    recursion($data, $value['id']);
       // 递归调用,查找当前数据的子级            $child[] = $value;
   // 把子级数据添加进数组        }
    }
        return $child;
}
    

得到结果:

[  {
    "id": "1",    "pid": "0",    "dsp": "1",    "child": [      {
        "id": "4",        "pid": "1",        "dsp": "1-4",        "child": [          {
            "id": "5",            "pid": "4",            "dsp": "1-4-5",            "child": [              {
                "id": "6",                "pid": "5",                "dsp": "1-4-5-6",                "child": []              }
            ]          }
,          {
            "id": "10",            "pid": "4",            "dsp": "1-4-10",            "child": []          }
        ]      }
,      {
        "id": "9",        "pid": "1",        "dsp": "1-9",        "child": []      }
    ]  }
,  {
    "id": "2",    "pid": "0",    "dsp": "2",    "child": [      {
        "id": "8",        "pid": "2",        "dsp": "2-8",        "child": []      }
    ]  }
,  {
    "id": "3",    "pid": "0",    "dsp": "3",    "child": [      {
        "id": "7",        "pid": "3",        "dsp": "3-7",        "child": []      }
    ]  }
    ]

更多相关php知识,请访问php教程!

以上就是PHP使用递归按层级查找数据(代码详解)的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: PHP使用递归按层级查找数据(代码详解)
本文地址: https://pptw.com/jishu/596210.html
PHP-Curl模拟HTTPS请求(代码实例) PHP对一组数进行重新排列(冒泡算法)

游客 回复需填写必要信息