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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。