当前位置:首页 > CMS教程 > Thinkphp > 列表

Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-24 08:27:22 浏览: 评论:0 

本文实例讲述了Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点,分享给大家供大家参考,具体如下:

list_to_tree 使用起来十分方便,详细可查看手册,因为我在用的时候需要同时列出所有节点,所以写了一个递归函数,拿出来供大家参考。

  1. public function index(){ 
  2.   Load('extend');      //加载扩展方法 
  3.   $Category=D('Category'); 
  4.   $list=$Category->order('sort desc')->select();//实现同级节点排序 
  5.   $list=list_to_tree($list,'id','fid'); //详细参数见手册 
  6.   $list=$this->findChild($list); 
  7.   dump($list); 
  8. protected function findChild($arr){ 
  9.     static $tree=array(); 
  10.     foreach ($arr as $key=>$val){ 
  11.         $tree[]=$val
  12.         if (isset($val['_child'])){ 
  13.           $this->findChild($val['_child']); 
  14.         } 
  15.       } 
  16.   return $tree
  17.  
  18. /** 
  19.  * 把返回的数据集转换成Tree 
  20.  * @access public 
  21.  * @param array $list 要转换的数据集 
  22.  * @param string $pid parent标记字段 
  23.  * @param string $level level标记字段 
  24.  * @return array 
  25.  */ 
  26. function list_to_tree($list$pk='id',$pid = 'pid',$child = '_child',$root=0) { 
  27.   // 创建Tree 
  28.   $tree = array(); 
  29.   if(is_array($list)) { 
  30.     // 创建基于主键的数组引用 
  31.     $refer = array(); 
  32.     foreach ($list as $key => $data) { 
  33.       $refer[$data[$pk]] =& $list[$key]; 
  34.     } 
  35.     foreach ($list as $key => $data) { 
  36.       // 判断是否存在parent 
  37.       $parentId = $data[$pid]; 
  38.       if ($root == $parentId) { 
  39.         $tree[] =& $list[$key]; 
  40.       }else
  41.         if (isset($refer[$parentId])) { 
  42.           $parent =& $refer[$parentId]; 
  43.           $parent[$child][] =& $list[$key]; 
  44.         } 
  45.       } 
  46.     } 
  47.   } 
  48.   return $tree
  49.  
  50. /** 
  51.  * 对查询结果集进行排序 
  52.  * @access public 
  53.  * @param array $list 查询结果 
  54.  * @param string $field 排序的字段名 
  55.  * @param array $sortby 排序类型 
  56.  * asc正向排序 desc逆向排序 nat自然排序 
  57.  * @return array 
  58.  */ 
  59. function list_sort_by($list,$field$sortby='asc') { 
  60.   if(is_array($list)){ 
  61.     $refer = $resultSet = array(); 
  62.     foreach ($list as $i => $data
  63.       $refer[$i] = &$data[$field]; 
  64.     switch ($sortby) { 
  65.       case 'asc'// 正向排序 
  66.         asort($refer); 
  67.         break
  68.       case 'desc':// 逆向排序 
  69.         arsort($refer); 
  70.         break
  71.       case 'nat'// 自然排序 
  72.         natcasesort($refer); 
  73.         break
  74.     } 
  75.     foreach ( $refer as $key=> $val
  76.       $resultSet[] = &$list[$key]; 
  77.     return $resultSet
  78.   } 
  79.   return false; 
  80.  
  81. /** 
  82.  * 在数据列表中搜索 
  83.  * @access public 
  84.  * @param array $list 数据列表 
  85.  * @param mixed $condition 查询条件 
  86.  * 支持 array('name'=>$value) 或者 name=$value 
  87.  * @return array 
  88.  */ 
  89. function list_search($list,$condition) { 
  90.   if(is_string($condition)) 
  91.     parse_str($condition,$condition); 
  92.   // 返回的结果集合 
  93.   $resultSet = array(); 
  94.   foreach ($list as $key=>$data){ 
  95.     $find  =  false; 
  96.     foreach ($condition as $field=>$value){ 
  97.       if(isset($data[$field])) { 
  98.         if(0 === strpos($value,'/')) { 
  99.           $find  =  preg_match($value,$data[$field]); 
  100.         }elseif($data[$field]==$value){ 
  101.           $find = true; 
  102.         } 
  103.       } 
  104.     } 
  105.     if($find
  106.       $resultSet[]   =  &$list[$key]; 
  107.   } 
  108.   return $resultSet
  109. }

Tags: list_to_tree Thinkphp无限级

分享到: