1. 程式人生 > >php實現無限級分類的兩種方式

php實現無限級分類的兩種方式

@param HP 獲取 velt 分類 get gets key turn

一、梯式:
  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實現無限級分類的兩種方式