热门IT资讯网

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

发表于:2024-11-30 作者:热门IT资讯网编辑
编辑最后更新 2024年11月30日,今天主要介绍一下使用递归来按层级查找数据。原理挺简单的,主要是通过父级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使用递归按层级查找数据(代码详解)的详细内容,更多请关注其它相关文章!

0