[TOC]
### 递归算法
遍历数组,根据每条数据的id值去寻找所有parent\_id值等于自己id值的数据,直到找不到为止。
`~~~
```
/**
* 无限极分类(递归方式)
*@param array $categoryies 需要分类的数组
*@param int $parent_id 需要查询的顶级分类id,默认为0 表示顶级分类
*@param int $level 默认0 表示是顶级分类 增加无限极分类的层级标识 用于在模板显示缩进层级关系
*@return array 返回一个已经无限极分类完成的数组
*/
function limit_category($categoryies, $parent_id = 0, $level = 0)
{
//定义一个静态数组 用于保存每次遍历得到的结果
static $res = [];
//遍历数组 进行数据判断
foreach($categoryies as $key => $val)
{
if($val['parent_id'] == $parent_id)
{
$val['level'] = $level;
//是要找的父级分类内容
$res[] = $val;
//递归点 当前分类有可能有子分类
limit_category($categoryies, $val['id'], $level + 1); //注意这里是id不是parent_id !!
}
}
return $res;
}
```
最后返回的数组结构如下:
```
array (size=6)
0 =>
array (size=5)
'cat_id' => int 80
'cname' => string '软件开发' (length=12)
'is_show' => int 1
'parent_id' => int 0
'level' => int 0
1 =>
array (size=5)
'cat_id' => int 7
'cname' => string 'php' (length=3)
'is_show' => int 1
'parent_id' => int 80
'level' => int 1
2 =>
array (size=5)
'cat_id' => int 6
'cname' => string 'mysql' (length=5)
'is_show' => int 1
'parent_id' => int 80
'level' => int 1
3 =>
array (size=5)
'cat_id' => int 74
'cname' => string 'Linux' (length=5)
'is_show' => int 1
'parent_id' => int 80
'level' => int 1
4 =>
array (size=5)
'cat_id' => int 87
'cname' => string '生活随笔' (length=12)
'is_show' => int 1
'parent_id' => int 0
'level' => int 0
5 =>
array (size=5)
'cat_id' => int 94
'cname' => string '邻居' (length=6)
'is_show' => int 1
'parent_id' => int 0
'level' => int 0
```
~~~