재귀적 방법을 사용하여 무한 분류 달성
보통 프로젝트를 작성할 때, 예를 들어 몰 카테고리 등을 작성할 때 해당 카테고리의 상위 카테고리를 구현하거나, 다른 프로젝트를 부서로 구현합니다. 경영 상급부서에서는 주로 무한분류를 이용하여
분류를 수행합니다.1단계: 우선 데이터 테이블을 디자인할 때 인피니투스 분류를 구현하고 싶다면 보통 데이터 테이블에 추가 필드 pid를 추가하는 편입니다.
(1) 테이블 생성:
-----------------------
-- pid의 테이블 구조
-----------------------
`pid`가 존재하는 경우 테이블 삭제;
테이블 pid 생성(
idtinyint unsigned NOT NULL AUTO_INCREMENT 기본 키 주석 '기본 키 id',
이름 varchar(32) NOT NULL,
별명 varchar(32) DEFAULT NULL,
pidtinyint(10) unsigned DEFAULT NULL,
sort mediaint(10) unsigned DEFAULT 50
) 엔진=InnoDB 기본 문자 집합=utf8;
(2) 데이터 삽입:
-----------------------
-- pid 기록
-----------------------
`pid` 값('1', '기술', '', '0', '50')에 삽입;
`pid` 값에 삽입('2', '군사', '', '0', '50');
`pid` 값('3', '인간과 자연', '', '0', '50')에 삽입;
`pid` 값('4', 'Gourmet', '', '0', '50')에 삽입;
`pid` 값('5', '인공 지능', '', '1', '50')에 삽입;
`pid` 값('6', '로봇', '', '5', '50')에 삽입;
`pid` 값에 삽입('7', '드론', '', '5', '50');
INSERT INTO `pid` VALUES('8', '자율 자동차', '', '5', '50');
INSERT INTO `pid` 값('9', '군사 로봇', '하하', '6', '50');
`pid` 값('10', '서비스 로봇', '', '6', '50')에 삽입;
`pid` 값('11', '항공모함', '', '2', '50')에 삽입;
INSERT INTO `pid` VALUES('12', '항공기 기반 항공기', '', '2', '50');
`pid` 값에 삽입('13', '조기 경보 항공기', '', '2', '50');
`pid` 값('14', '미사일', '', '2', '50')에 삽입;
`pid` 값에 삽입('15', 'A Bite of China', '', '3', '50');
INSERT INTO `pid` VALUES ('16', '사천 요리', '', '15', '50');
`pid` 값에 삽입('17', '광둥어', '', '15', '50');
INSERT INTO `pid` VALUES ('18', '후난 요리', '', '15', '50');
`pid` 값('19', 'bio', '', '4', '50')에 삽입;
`pid` 값('20', '동물', '', '19', '50')에 삽입;
`pid` 값('21', '식물', '', '19', '50')에 삽입;
`pid` 값에 삽입('26', '하하', '하하', '0', '50');
`pid` 값에 삽입('27', '안녕하세요', '안녕하세요', '26', '50');
`pid` 값에 삽입('28', 'Pssssss', 'ssssssss', '26', '50');
데이터 시트:
데이터 테이블은 다음과 같습니다.
2단계: 요점 파악, 인피니투스 분류
<?<span style="color: #000000;">php </span><span style="color: #008000;">//</span><span style="color: #008000;">设置字符集</span> header(<span style="color: #800000;">'</span><span style="color: #800000;">content-type:text/html;charset=utf-8</span><span style="color: #800000;">'</span><span style="color: #000000;">); </span><span style="color: #008000;">/*</span><span style="color: #008000;">* * 无限极分类 * @param $list array() * return array </span><span style="color: #008000;">*/</span> <span style="color: #008000;">//</span><span style="color: #008000;">无限极分类,实现具有父子关系的数据分类</span> function category($arr,$pid=<span style="color: #800080;">0</span>,$level=<span style="color: #800080;">0</span><span style="color: #000000;">){ </span><span style="color: #008000;">//</span><span style="color: #008000;">定义一个静态变量,存储一个空数组,用静态变量,是因为静态变量不会被销毁,会保存之前保留的值,普通变量在函数结束时,会死亡,生长周期函数开始到函数结束,再次调用重新开始生长 </span><span style="color: #008000;">//</span><span style="color: #008000;">保存一个空数组</span> <span style="color: #0000ff;">static</span> $list=<span style="color: #000000;">array(); </span><span style="color: #008000;">//</span><span style="color: #008000;">通过遍历查找是否属于顶级父类,pid=0为顶级父类,</span> <span style="color: #0000ff;">foreach</span>($arr <span style="color: #0000ff;">as</span><span style="color: #000000;"> $value){ </span><span style="color: #008000;">//</span><span style="color: #008000;">进行判断如果pid=0,那么为顶级父类,放入定义的空数组里</span> <span style="color: #0000ff;">if</span>($value[<span style="color: #800000;">'</span><span style="color: #800000;">pid</span><span style="color: #800000;">'</span>]==<span style="color: #000000;">$pid){ </span><span style="color: #008000;">//</span><span style="color: #008000;">添加空格进行分层</span> $arr[<span style="color: #800000;">'</span><span style="color: #800000;">level</span><span style="color: #800000;">'</span>]=<span style="color: #000000;">$level; $list[]</span>=<span style="color: #000000;">$value; </span><span style="color: #008000;">//</span><span style="color: #008000;">递归点,调用自身,把顶级父类的主键id作为父类进行再调用循环,空格+1</span> category($arr,$value[<span style="color: #800000;">'</span><span style="color: #800000;">id</span><span style="color: #800000;">'</span>],$level+<span style="color: #800080;">1</span><span style="color: #000000;">); } } </span><span style="color: #0000ff;">return</span> $list;<span style="color: #008000;">//</span><span style="color: #008000;">递归出口</span> }
데이터 연결:
효과:
2. 작은 확장:
이것은 인피니투스 분류에 대한 나만의 이해이자 나만의 지식 포인트를 요약한 것입니다. 혹시 잘못된 부분이 있다면 몇 가지 제안을 해주시고, 함께 배우고, 함께 발전해 나가셨으면 좋겠습니다. 고마워요~