php教程

超轻量级php框架startmvc

PHP实现无限极分类生成分类树的方法

更新时间:2020-03-24 07:08:29 作者:startmvc
本文实例讲述了PHP实现无限极分类生成分类树的方法。分享给大家供大家参考,具体如下:

本文实例讲述了PHP实现无限极分类生成分类树的方法。分享给大家供大家参考,具体如下:

现在的分类数据库设计基本都是:每一个分类有一个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 无限极 分类 分类树