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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。