> php教程 > php手册 > 본문

재귀의 일부 응용 (2) 무한 분류

WBOY
풀어 주다: 2016-08-08 08:49:46
원래의
807명이 탐색했습니다.

재귀적 방법을 사용하여 무한 분류 달성

보통 프로젝트를 작성할 때, 예를 들어 몰 카테고리 등을 작성할 때 해당 카테고리의 상위 카테고리를 구현하거나, 다른 프로젝트를 부서로 구현합니다. 경영 상급부서에서는 주로 무한분류를 이용하여

분류를 수행합니다.

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. 작은 확장:

이것은 인피니투스 분류에 대한 나만의 이해이자 나만의 지식 포인트를 요약한 것입니다. 혹시 잘못된 부분이 있다면 몇 가지 제안을 해주시고, 함께 배우고, 함께 발전해 나가셨으면 좋겠습니다. 고마워요~

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!