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

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

概述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使用递归按层级查找数据(代码详解)全部内容,希望文章能够帮你解决PHP使用递归按层级查找数据(代码详解)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1009382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存