thinkphp5使用无限极分类
本文实例为大家分享了thinkphp5使用无限极分类的具体代码,供大家参考,具体内容如下
1.先根据普通递归完成无限极分类
2.再根据分号的类的level添加字符,再次存入数组的_name字段,最后按照_name字段输出
/**
*获得树状数据
*@param$data数据
*@param$title数据库中字段名
*@paramstring$fieldPri数据库中主键id
*@paramstring$fieldPid数据库中父id
*@returnarray
*/
staticpublicfunctiontree($data,$title,$fieldPri='cid',$fieldPid='pid')
{
if(!is_array($data)||empty($data))
returnarray();
$arr=Data::channelList($data);
foreach($arras$k=>$v){
$str="";
if($v['_level']>2){
for($i=1;$i<$v['_level']-1;$i++){
$str.="│";
}
}
if($v['_level']!=1){
$t=$title?$v[$title]:"";
if(isset($arr[$k+1])&&$arr[$k+1]['_level']>=$arr[$k]['_level']){
$arr[$k]['_name']=$str."├─".$v['_html'].$t;
}else{
$arr[$k]['_name']=$str."└─".$v['_html'].$t;
}
}else{
$arr[$k]['_name']=$v[$title];
}
}
//设置主键为$fieldPri
$data=array();
foreach($arras$d){
$data[$d[$fieldPri]]=$d;
}
return$data;
}
/**
*获得所有子栏目
*@param$data栏目数据
*@paramint$pid操作的栏目
*@paramstring$html栏目名前字符
*@paramstring$fieldPri表主键
*@paramstring$fieldPid父id
*@paramint$level等级
*@returnarray
*/
staticpublicfunctionchannelList($data,$pid=0,$html="",$fieldPri='cid',$fieldPid='pid',$level=1)
{
$data=self::_channelList($data,$pid,$html,$fieldPri,$fieldPid,$level);
if(empty($data))
return$data;
foreach($dataas$n=>$m){
if($m['_level']==1)
continue;//结束单次循环
$data[$n]['_first']=false;
$data[$n]['_end']=false;
if(!isset($data[$n-1])||$data[$n-1]['_level']!=$m['_level']){
$data[$n]['_first']=true;
}
if(isset($data[$n+1])&&$data[$n]['_level']>$data[$n+1]['_level']){
$data[$n]['_end']=true;
}
}
//更新key为栏目主键
$category=array();
foreach($dataas$d){
$category[$d[$fieldPri]]=$d;
}
return$category;
}
//只供channelList方法使用
/**
*获得所有子栏目
*@param$data栏目数据
*@paramint$pid操作的栏目
*@paramstring$html栏目名前字符
*@paramstring$fieldPri表主键
*@paramstring$fieldPid父id
*@paramint$level等级
*@returnarray
*/
staticprivatefunction_channelList($data,$pid=0,$html="",$fieldPri='cid',$fieldPid='pid',$level=1)
{
if(empty($data))
returnarray();
$arr=array();
foreach($dataas$v){
$id=$v[$fieldPri];
if($v[$fieldPid]==$pid){
$v['_level']=$level;
$v['_html']=str_repeat($html,$level-1);
$arr[]=$v;
$tmp=self::_channelList($data,$id,$html,$fieldPri,$fieldPid,$level+1);
$arr=array_merge($arr,$tmp);//array_merge把两个数组整合为一个数组
}
}
return$arr;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。