码迷,mamicode.com
首页 > Web开发 > 详细

php实现无限级分类的两种方式

时间:2018-06-21 01:41:21      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:pid   分类   无限级   etl   tree   AC   esc   实现   gets   

一、梯式:
  1. 代码:
    /*
    @desc:获取梯式分类
    @param data 需要转换的数据
    @param pkey 上级的键名
    @param key 主键名
    @param pid 顶级id
    @param level 起始层级 默认0
    @return ret 转换后的数组
    */
    function getleveltree($data,$pkey,$key,$pid = 0,$level = 0){
    $ret = array();
    foreach ($data as $v){
        if($v[$pkey] == $pid){
            $v[‘level‘] = $level;
            $ret[] = $v;
            $ret = array_merge($ret,getleveltree($data,$pkey,$key,$v[$key],$level+1));
        }
    }
    return $ret;
    }
  2. 测试:
    $data = array(
        array(
            ‘id‘ => 1,
            ‘pid‘ => 0
        ),
        array(
            ‘id‘ => 2,
            ‘pid‘ => 1
        ),
        array(
            ‘id‘ => 3,
            ‘pid‘ => 2
        )
    );
    $ret = getleveltree($data,‘pid‘,‘id‘);
    var_dump($ret);
  3. 输出:
    array(3) {
    [0]=>
    array(3) {
    ["id"]=>
    int(1)
    ["pid"]=>
    int(0)
    ["level"]=>
    int(0)
    }
    [1]=>
    array(3) {
    ["id"]=>
    int(2)
    ["pid"]=>
    int(1)
    ["level"]=>
    int(1)
    }
    [2]=>
    array(3) {
    ["id"]=>
    int(3)
    ["pid"]=>
    int(2)
    ["level"]=>
    int(2)
    }
    }

    二、裂变式:

  4. 代码:
    /*
    @desc:获取裂变式分类
    @param data 需要转换的数据
    @param pkey 上级的键名
    @param key 主键名
    @param pid 顶级id 默认0
    @return ret 转换后的数组
    */
    function getsubtree($data,$pkey,$key,$pid = 0) {
    $ret = array();
    foreach ($data as $v){
        if($v[$pkey] == $pid){
            $v[‘child‘] = getsubtree($data,$pkey,$key,$v[$key]);
            $ret[] = $v;            
        }
    }
    return $ret;
    }
  5. 测试:
    $data = array(
        array(
            ‘id‘ => 1,
            ‘pid‘ => 0
        ),
        array(
            ‘id‘ => 2,
            ‘pid‘ => 1
        ),
        array(
            ‘id‘ => 3,
            ‘pid‘ => 2
        )
    );
    $ret = getsubtree($data,‘pid‘,‘id‘);
    var_dump($ret);
  6. 输出:
    array(1) {
    [0]=>
    array(3) {
    ["id"]=>
    int(1)
    ["pid"]=>
    int(0)
    ["child"]=>
    array(1) {
      [0]=>
      array(3) {
        ["id"]=>
        int(2)
        ["pid"]=>
        int(1)
        ["child"]=>
        array(1) {
          [0]=>
          array(3) {
            ["id"]=>
            int(3)
            ["pid"]=>
            int(2)
            ["child"]=>
            array(0) {
            }
          }
        }
      }
    }
    }
    }

php实现无限级分类的两种方式

标签:pid   分类   无限级   etl   tree   AC   esc   实现   gets   

原文地址:http://blog.51cto.com/12173069/2131148

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!