Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
本文实例讲述了Thinkphp框架使用list_to_tree实现无限级分类列出所有节点。分享给大家供大家参考,具体如下:
list_to_tree使用起来十分方便,详细可查看手册。因为我在用的时候需要同时列出所有节点,所以写了一个递归函数,拿出来供大家参考。
publicfunctionindex(){
Load('extend');//加载扩展方法
$Category=D('Category');
$list=$Category->order('sortdesc')->select();//实现同级节点排序
$list=list_to_tree($list,'id','fid');//详细参数见手册
$list=$this->findChild($list);
dump($list);
}
protectedfunctionfindChild($arr){
static$tree=array();
foreach($arras$key=>$val){
$tree[]=$val;
if(isset($val['_child'])){
$this->findChild($val['_child']);
}
}
return$tree;
}
/**
*把返回的数据集转换成Tree
*@accesspublic
*@paramarray$list要转换的数据集
*@paramstring$pidparent标记字段
*@paramstring$levellevel标记字段
*@returnarray
*/
functionlist_to_tree($list,$pk='id',$pid='pid',$child='_child',$root=0){
//创建Tree
$tree=array();
if(is_array($list)){
//创建基于主键的数组引用
$refer=array();
foreach($listas$key=>$data){
$refer[$data[$pk]]=&$list[$key];
}
foreach($listas$key=>$data){
//判断是否存在parent
$parentId=$data[$pid];
if($root==$parentId){
$tree[]=&$list[$key];
}else{
if(isset($refer[$parentId])){
$parent=&$refer[$parentId];
$parent[$child][]=&$list[$key];
}
}
}
}
return$tree;
}
/**
*对查询结果集进行排序
*@accesspublic
*@paramarray$list查询结果
*@paramstring$field排序的字段名
*@paramarray$sortby排序类型
*asc正向排序desc逆向排序nat自然排序
*@returnarray
*/
functionlist_sort_by($list,$field,$sortby='asc'){
if(is_array($list)){
$refer=$resultSet=array();
foreach($listas$i=>$data)
$refer[$i]=&$data[$field];
switch($sortby){
case'asc'://正向排序
asort($refer);
break;
case'desc'://逆向排序
arsort($refer);
break;
case'nat'://自然排序
natcasesort($refer);
break;
}
foreach($referas$key=>$val)
$resultSet[]=&$list[$key];
return$resultSet;
}
returnfalse;
}
/**
*在数据列表中搜索
*@accesspublic
*@paramarray$list数据列表
*@parammixed$condition查询条件
*支持array('name'=>$value)或者name=$value
*@returnarray
*/
functionlist_search($list,$condition){
if(is_string($condition))
parse_str($condition,$condition);
//返回的结果集合
$resultSet=array();
foreach($listas$key=>$data){
$find=false;
foreach($conditionas$field=>$value){
if(isset($data[$field])){
if(0===strpos($value,'/')){
$find=preg_match($value,$data[$field]);
}elseif($data[$field]==$value){
$find=true;
}
}
}
if($find)
$resultSet[]=&$list[$key];
}
return$resultSet;
}
更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《ZendFrameWork框架入门教程》及《PHP模板技术总结》。
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。