>  기사  >  백엔드 개발  >  PHP Infinitus 분류는 무엇을 의미합니까?

PHP Infinitus 분류는 무엇을 의미합니까?

(*-*)浩
(*-*)浩원래의
2019-09-16 14:18:423622검색

php Infinitus 분류 간단히 말하면 Windows에서 새 폴더를 만들 수 있는 것처럼 범주를 여러 하위 범주로 나눌 수 있고 하나의 하위 범주를 여러 다른 하위 범주로 무한정 나눌 수 있습니다. 그런 다음 이 폴더에 폴더를 만들 수 있고

PHP Infinitus 분류는 무엇을 의미합니까?

# 🎜🎜##🎜 폴더 아래에 폴더를 만들 수도 있습니다. 🎜#Database Storage

무한 분류는 실제로 트리이며 모든 노드가 저장 요소로 사용됩니다. 각 노드에는 여러 개의 하위 노드와 단 하나의 상위 노드만 있을 수 있습니다.

MySQL 데이터 저장과 프로젝트의 데이터 테이블 저장 구조는 다음과 같습니다. (추천 학습:

PHP 프로그래밍 입문부터 숙련까지

)

CREATE TABLE t_tree_info (  `Fid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '标签自增ID',    `Fname` 
varchar(255)  NOT NULL DEFAULT '' COMMENT '节点名称',    `Fpid` bigint(20) unsigned NOT NULL DEFAULT 0  
COMMENT '父节点id',    `Fadd_time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'  COMMENT '创建时间',  
`Fmodify_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`Fid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='无限极分类菜单存储表';
#🎜 🎜#Core 필드는 노드의 고유 식별자 Fid와 해당 상위 노드 식별자 Fpid입니다.

기술적 구현

글로벌 데이터 스토리지 노드

노드 데이터는 이제 프로젝트의 MySQL에 저장됩니다. 테스트를 위해 MySQL 데이터를 어레이에 직접 저장하고 전역적으로 사용합니다. 데이터는 다음과 같이 저장됩니다:

private static $listData = [
    [
        "Fid" => 1,
        "Fpid" => 8,
        "Fname" => '首页',
    ],
    [
        "Fid" => 2,
        "Fpid" => 8,
        "Fname" => '博客',
    ],
    [
        "Fid" => 3,
        "Fpid" => 8,
        "Fname" => '官网',
    ],
    [
        "Fid" => 4,
        "Fpid" => 2,
        "Fname" => '个人博客',
    ],
    [
        "Fid" => 5,
        "Fpid" => 2,
        "Fname" => '他人博客',
    ],
    [
        "Fid" => 6,
        "Fpid" => 8,
        "Fname" => '测试1',
    ],
    [
        "Fid" => 7,
        "Fpid" => 8,
        "Fname" => '测试2',
    ],
    [
        "Fid" => 8,
        "Fpid" => 0,
        "Fname" => '无限极分类',
    ],
    [
        "Fid" => 9,
        "Fpid" => 5,
        "Fname" => '女性栏目',
    ],
    [
        "Fid" => 10,
        "Fpid" => 5,
        "Fname" => '男性栏目',
    ],
];

무한 분류를 달성하기 위한 참조 방법

아이디어:

#🎜 🎜## 🎜🎜#1 즉, 처리할 모든 데이터를 기본 키 Fid(pk)를 사용하여 배열로 패키징하므로 ​​해당 상위 열을 Fpid로 얻을 수 있습니다.

2. 루트 노드인 경우 해당 참조를 트리에 추가합니다. 그렇지 않으면 해당 참조를 상위 클래스의 하위 요소에 추가합니다. 이러한 방식으로 루트 노드만 트리에 추가되더라도 각 루트 노드에 하위 요소가 있는 경우 하위 요소에 대한 참조가 포함됩니다. 그러므로 나무 모양을 이룰 수 있다.

개인적으로 인용된 디자인 아이디어가 재귀적 아이디어보다 이해하기 쉽고 직관적이라고 생각합니다.

코드는 다음과 같습니다:

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pk 自增字段(栏目Fid)
 * @param string $pid parent标记字段
 * @return array
 */
public static function quote_make_tree($list, $pk = 'Fid', $pid = 'Fpid',$child = '_child', $root = 0)
{
    $tree = $packData = [];
    foreach ($list as $data) {
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key =>$val) {
        if ($val[$pid] == $root) {//代表跟节点
          $tree[] = & $packData[$key];
        } else {
          //找到其父类
          $packData[$val[$pid]][$child][] = & $packData[$key];
        }
    }
    return $tree;
}

참조 호출 트리:

/**
 * 引用生成树
 * @return
 */
public static function quote_tree_test()
{
    $tree = self::make_tree(self::$listData, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0);
    echo json_encode($tree);
}
#🎜 🎜## 🎜🎜#반환 결과는 다음과 같습니다.

[
    {
        "Fid": 8,
        "Fpid": 0,
        "Fname": "无限极分类",
        "_child": [
            {
                "Fid": 1,
                "Fpid": 8,
                "Fname": "首页"
            },
            {
                "Fid": 2,
                "Fpid": 8,
                "Fname": "博客",
                "_child": [
                    {
                        "Fid": 4,
                        "Fpid": 2,
                        "Fname": "个人博客"
                    },
                    {
                        "Fid": 5,
                        "Fpid": 2,
                        "Fname": "他人博客",
                        "_child": [
                            {
                                "Fid": 9,
                                "Fpid": 5,
                                "Fname": "女性栏目"
                            },
                            {
                                "Fid": 10,
                                "Fpid": 5,
                                "Fname": "男性栏目"
                            }
                        ]
                    }
                ]
            },
            {
                "Fid": 3,
                "Fpid": 8,
                "Fname": "官网"
            },
            {
                "Fid": 6,
                "Fpid": 8,
                "Fname": "测试1"
            },
            {
                "Fid": 7,
                "Fpid": 8,
                "Fname": "测试2"
            }
        ]
    }
]

위 내용은 PHP Infinitus 분류는 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.