本文实例讲述了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