PHP无限级分类

时间:2022-10-20 20:18:47

首先你其实这个理解并没有那么男,我举个列子,可能大家就比较好理解,比如说有个人叫张三,而他得儿子叫张小三,另一个人叫李四,他的儿子叫李小四。如何辨别他们啦,当然就是这个姓氏和他们年龄段的长相不同(其实这个长相就是像是一个标识,可以这样理解吧)。那么先新建一个数组。为了方便快速,我就不弄数据库表了直接数据呈现就好,数据如下面的样子。

$array = array( array('id' => 1, 'pid' => 0, 'name' => '张三'), array('id' => 2, 'pid' => 0, 'name' => '李四'), array('id' => 3, 'pid' => 1, 'name' => '张小三'), array('id' => 4, 'pid' => 2, 'name' => '李小四'), );

首先这里不知道大家看明白没有。给大家解释下,数据内的第一个第二数组都是父级,三和四都是子级。这里面的pid就是所指的就是父级数组内的id值,那么这样子关联的话,是不是即使有再多的类或者说是类型是不是就很好关联了啦。

下面我们就用用递归的方法来实现以下,无限极分类(其实递归可以理解是闭包函数的一种特殊形式,就是就是函数内部的名字与外部的函数名相同)。

function tree($array,$pid=0,$level=0){ static $conten=[];//这里我们定义一个空数组来存后天 //筛选出来的东西记住是静态的。 //当然筛选数据的第一步当然是遍历我们的$array数组, //先把想要的东西取来 foreach($array as $key=>$value){ //第一次遍历我们先要找到pid=0的节点,也是父亲们 if($value['pid'] == $pid){ $value['level'] = $level; //然后我们把它装进我们的数组$content中 $conten[]=$value; //为了减少内存消耗我们如下给他摧毁下 unset($array[$key]); //这里需要注意的的是level在每次进来的时候是会加一个, //这是很多人不理解的地方默认是0开始 tree($array, $value['id'], $level+1); } } return $content; } $array = tree($array); foreach($array as $value){ echo str_repeat('&nbsp &nbsp', $value['level']), $value['name'].'<br/>'; }

出来之后就如下图所示的样子:

PHP无限级分类

这个str_repeat 是把字符窜重复指定的次数的意思。所以按照这样子的思路你是否能够理解了啦。之所要定义静态的数组,是因为它能够不把变量$content销毁掉,就像是引用传值,把它放在内存中不被销毁掉。可以这样子理解吧,能明白了嘛。