本文实例讲述了Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点。分享给大家供大家参考,具体如下:
list_to_tree 使用起来十分方便,详细可查看手册。因为我在用的时候需要同时列出所有节点,所以写了一个递归函数,拿出来供大家参考。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public function index(){ Load( 'extend' ); //加载扩展方法 $Category =D( 'Category' ); $list = $Category ->order( 'sort desc' )->select(); //实现同级节点排序 $list =list_to_tree( $list , 'id' , 'fid' ); //详细参数见手册 $list = $this ->findChild( $list ); dump( $list ); } protected function findChild( $arr ){ static $tree = array (); foreach ( $arr as $key => $val ){ $tree []= $val ; if (isset( $val [ '_child' ])){ $this ->findChild( $val [ '_child' ]); } } return $tree ; } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array */ function list_to_tree( $list , $pk = 'id' , $pid = 'pid' , $child = '_child' , $root =0) { // 创建Tree $tree = array (); if ( is_array ( $list )) { // 创建基于主键的数组引用 $refer = array (); foreach ( $list as $key => $data ) { $refer [ $data [ $pk ]] =& $list [ $key ]; } foreach ( $list as $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 ; } /** * 对查询结果集进行排序 * @access public * @param array $list 查询结果 * @param string $field 排序的字段名 * @param array $sortby 排序类型 * asc正向排序 desc逆向排序 nat自然排序 * @return array */ function list_sort_by( $list , $field , $sortby = 'asc' ) { if ( is_array ( $list )){ $refer = $resultSet = array (); foreach ( $list as $i => $data ) $refer [ $i ] = & $data [ $field ]; switch ( $sortby ) { case 'asc' : // 正向排序 asort( $refer ); break ; case 'desc' : // 逆向排序 arsort( $refer ); break ; case 'nat' : // 自然排序 natcasesort( $refer ); break ; } foreach ( $refer as $key => $val ) $resultSet [] = & $list [ $key ]; return $resultSet ; } return false; } /** * 在数据列表中搜索 * @access public * @param array $list 数据列表 * @param mixed $condition 查询条件 * 支持 array('name'=>$value) 或者 name=$value * @return array */ function list_search( $list , $condition ) { if ( is_string ( $condition )) parse_str ( $condition , $condition ); // 返回的结果集合 $resultSet = array (); foreach ( $list as $key => $data ){ $find = false; foreach ( $condition as $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框架的PHP程序设计有所帮助。
原文链接:https://blog.csdn.net/zzh_meng520/article/details/78638042