php无限极分类组装成分类树的巧妙代码

原创 2015年11月21日 11:49:44

现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式:

$arr = array(
	array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'),
	array("id" => 2 , "pid" => 0 , 'cat' => '栏目二'),
	array("id" => 3 , "pid" => 1 , 'cat' => '栏目三'),
	array("id" => 4 , "pid" => 2 , 'cat' => '栏目四'),
	array("id" => 5 , "pid" => 1 , 'cat' => '栏目五'),
	array("id" => 6 , "pid" => 5 , 'cat' => '栏目六'),
	array("id" => 7 , "pid" => 5 , 'cat' => '栏目七'),
	array("id" => 8 , "pid" => 6 , 'cat' => '栏目八'),
	array("id" => 9 , "pid" => 1 , 'cat' => '栏目九'),
	array("id" => 10 , "pid" => 0 , 'cat' => '栏目十'),
	array("id" => 11 , "pid" => 10 , 'cat' => '栏目十一'),
	array("id" => 12 , "pid" => 11 , 'cat' => '栏目十二'),
	array("id" => 13 , "pid" => 2 , 'cat' => '栏目十三'),
	array("id" => 14, "pid" => 13 , 'cat' => '栏目十四')
);

不多说,直接上处理代码:

//生成无限极分类树
function make_tree($arr){
	$refer = array();
	$tree = array();
	foreach($arr as $k => $v){
		$refer[$v['id']] = & $arr[$k];  //创建主键的数组引用
	}
	
	foreach($arr as $k => $v){
		$pid = $v['pid'];   //获取当前分类的父级id
		if($pid == 0){
			$tree[] = & $arr[$k];	//顶级栏目
		}else{
			if(isset($refer[$pid])){
				$refer[$pid]['subcat'][] = & $arr[$k];	//如果存在父级栏目,则添加进父级栏目的子栏目数组中
			}
		}
	}
	
	return $tree;
}


测试运行:

$cat = make_tree($arr);
print_r($cat);

运行结果:

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [cat] => 栏目一
            [subcat] => Array
                (
                    [0] => Array
                        (
                            [id] => 3
                            [pid] => 1
                            [cat] => 栏目三
                        )

                    [1] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [cat] => 栏目五
                            [subcat] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 6
                                            [pid] => 5
                                            [cat] => 栏目六
                                            [subcat] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 8
                                                            [pid] => 6
                                                            [cat] => 栏目八
                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [id] => 7
                                            [pid] => 5
                                            [cat] => 栏目七
                                        )

                                )

                        )

                    [2] => Array
                        (
                            [id] => 9
                            [pid] => 1
                            [cat] => 栏目九
                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [pid] => 0
            [cat] => 栏目二
            [subcat] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [pid] => 2
                            [cat] => 栏目四
                        )

                    [1] => Array
                        (
                            [id] => 13
                            [pid] => 2
                            [cat] => 栏目十三
                            [subcat] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 14
                                            [pid] => 13
                                            [cat] => 栏目十四
                                        )

                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 10
            [pid] => 0
            [cat] => 栏目十
            [subcat] => Array
                (
                    [0] => Array
                        (
                            [id] => 11
                            [pid] => 10
                            [cat] => 栏目十一
                            [subcat] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 12
                                            [pid] => 11
                                            [cat] => 栏目十二
                                        )

                                )

                        )

                )

        )

)

如果大家需要这样的组装格式,或者需要该格式方便后续的处理,可以尝试此方法,希望这篇文章能帮到大家
版权声明:本文为博主原创文章,未经博主允许不得转载。

php实现无限极分类

php无限极分类 这里首先介绍一下,什么是无限极分类?无限极分类简单点说就是一个类可以分成多个子类,然后一个子类又可以分另外多个子类这样无限分下去,就好象windows可以新建一个文件夹,然后在这个...

PHP实现菜单无限极分类

用PHP如何无限极分类一般的项目菜单根据不同的用户,不同的角色登录,显示不同,如果仅仅用if else来判断就显得很笨拙,如果要修改菜单就很麻烦。最好的方法就是把菜单存储在数据库,然后从数据库中取出,...

PHP中无限极分类函数的实现

通过引用方式实现无限极分类;通过递归方式实现无限极分类
  • hsd2012
  • hsd2012
  • 2016年05月24日 17:49
  • 7531

PHP实现无限级分类分析

最近在写一个博客,由于博主栏目比较多,所以二级栏目已经满足不了,所以需要实现三级菜单,下面我们就一点点的来分析。 这是我最后实现的效果图: 由于需要实现无限级分类,所以我们需要知道它的子栏目有什么...

PHP无限级分类实现(递归+非递归)

PHP实现无限极分类

利用两个for循环实现无限级分类 表: 字段名 字段类型 备注 默认值 id int 主键 auto-increment name varchar 分类名...

PHP 无限极分类数组

/*         *     无限极分类 类         */     header("Content-Type: text/html; charset=UTF-8");     Cl...

php无限极分类各种方法总结

php无极限分类 php无极分类 php无极限分类方法 php无限分类方法

php实现无限极分类

关于无限极分类的介绍就不多叙述了,下面直接贴代码。比如有一个category表,如下: 要实现无限极分类,则可以使用下面的方法. 类形式: class Category { ...

PHP和MySQL处理树状、分级、无限分类、分层数据的方法

文章标题中的多个词语表达的其实是一个意思,就是递归分类数据,分级数据非常类似数据结构中的树状结构,即每个节点有自己的孩子节点,孩子结点本身也是父亲节点。这是一个递归、分层形式。可以称之为树形层级数据。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:php无限极分类组装成分类树的巧妙代码
举报原因:
原因补充:

(最多只允许输入30个字)