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

一、梯式:

  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) {
            }
          }
        }
      }
    }
    }
    }

猜你喜欢

转载自blog.51cto.com/12173069/2131148
今日推荐