首页 > php教程 > php手册 > Thinkphp的list_to_tree 实现无限级分类列出所有节点

Thinkphp的list_to_tree 实现无限级分类列出所有节点

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
发布: 2016-06-13 09:28:33
原创
1352 人浏览过

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

 

登录后复制

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;

}

登录后复制



相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板