PHP无限级分类

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

$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' => '李小四'),
);

首先这里不知道大家看明白没有。给大家解释下,数据内的第一个,第二数(0)组都是父级,三和四数(1,2)都是子级。这里面的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('   ', $value['level']), $value['name'].'
'; }

 

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

PHP无限级分类_第1张图片

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

你可能感兴趣的:(PHP无限极分类)