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'=>'栏目十四') );
不多说,直接上处理代码:
//生成无限极分类树 functionmake_tree($arr){ $refer=array(); $tree=array(); foreach($arras$k=>$v){ $refer[$v['id']]=&$arr[$k];//创建主键的数组引用 } foreach($arras$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数据结构与算法教程》、《php程序设计算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。