>  기사  >  백엔드 개발  >  PHP는 재귀 함수를 사용하여 무한 분류를 달성합니다.

PHP는 재귀 함수를 사용하여 무한 분류를 달성합니다.

WBOY
WBOY원래의
2016-08-08 09:18:561074검색

PHP를 배우는 많은 친구들이 실력을 향상시키기 위한 방법으로 온라인 쇼핑몰을 구축하려고 노력할 것이라고 믿습니다. 제품 분류, 제품 이름 등에 대한 다양한 작업에 익숙해지면 무제한 분류 목록을 만들어 볼 수 있습니다.

무한분류란 무엇인가요?

무한급 분류는 분류기법의 일종으로, 예를 들어 부서구성, 기사분류, 주제분류 등이 종종 무한급 분류로 이해될 수 있습니다. 사실 생각해보면 인생에는 분류가 너무 많다. 옷은 남성복과 여성복, 상의와 바지로 나눌 수 있고, 연령별로도 분류할 수 있다. 분류는 어디에나 있으며 분류는 "무한"으로 나타납니다. 여기서는 무한 분류의 필요성에 대해 이야기하지 않겠습니다.

무한분류의 원리 소개

무한분류는 겉으로는 "고상해" 보이지만 사실 원리는 매우 간단합니다. 무한 분류에는 코드의 독창성이 필요할 뿐만 아니라 데이터베이스 설계의 합리성이 필요합니다. 무한 분류를 충족하려면 데이터베이스에 id와 pid라는 두 개의 필수 필드가 있어야 합니다. id는 자신을 식별하는 데 사용되고 pid는 부모 ID를 나타내는 데 사용됩니다. 즉, 각 분류 레코드는 자신을 설명할 뿐만 아니라 가장 밀접하게 관련된 다른 ID도 설명합니다. 복잡해 보이던 문제가 이런 작은 트릭으로 해결되었습니다.

더 이상 고민하지 말고 이제 이 기사의 예를 보여드리겠습니다.

저는 열렬한 해적 팬으로서 이 기사에서는 "원피스"의 캐릭터 구성을 예로 들어 보겠습니다.

데이터베이스 준비:

테이블 일체형 만들기:

<span>create</span><span>table</span><span> onepiece(
    id </span><span>int</span><span> auto_increment,
    pid </span><span>int</span><span>not</span><span>null</span><span>,
    name </span><span>varchar</span>(<span>225</span>) <span>not</span><span>null</span><span>,
    </span><span>primary</span><span>key</span><span>(id)
);</span>

테스트 데이터 삽입:

<span>insert</span> onepiece <span>values</span><span>    (</span><span>1</span>,<span>0</span>,<span>'</span><span>海军</span><span>'</span><span>),
    (</span><span>2</span>,<span>0</span>,<span>'</span><span>海贼</span><span>'</span><span>),
    (</span><span>3</span>,<span>0</span>,<span>'</span><span>革命军</span><span>'</span><span>),
    (</span><span>4</span>,<span>1</span>,<span>'</span><span>青雉</span><span>'</span><span>),
    (</span><span>5</span>,<span>1</span>,<span>'</span><span>赤犬</span><span>'</span><span>),
    (</span><span>6</span>,<span>1</span>,<span>'</span><span>黄猿</span><span>'</span><span>),
    (</span><span>7</span>,<span>2</span>,<span>'</span><span>四皇</span><span>'</span><span>),
    (</span><span>8</span>,<span>2</span>,<span>'</span><span>七武海</span><span>'</span><span>),
    (</span><span>9</span>,<span>2</span>,<span>'</span><span>草帽海贼团</span><span>'</span><span>),
    (</span><span>10</span>,<span>9</span>,<span>'</span><span>索隆</span><span>'</span><span>),
    (</span><span>11</span>,<span>7</span>,<span>'</span><span>香克斯</span><span>'</span><span>),
    (</span><span>12</span>,<span>8</span>,<span>'</span><span>多弗朗明哥</span><span>'</span><span>),
    (</span><span>13</span>,<span>8</span>,<span>'</span><span>克洛克达尔</span><span>'</span>);

대중 과학을 기반으로 한 원피스의 배경은 다음과 같습니다. 세계는 해군, 해적, 혁명군의 세 가지 주요 진영으로 나뉩니다. 해군에는 아오키지, 아카이누, 키자루 장군이 있습니다. 해적에는 사천황, 칠부회, 밀짚모자 해적단이 포함됩니다. Yonko에는 ​​Shanks가 있고 Shichibukai에는 Doflamingo와 Crocodile이 있으며 밀짚 모자 해적에는 Zoro가 있습니다. (광고: 원피스는 정말 좋습니다.)

궁극적 목표 :

오늘 만들어볼 것은 무한분류형 2가지 형태인데 하나는 드롭다운 리스트형이고 또 하나는 네비게이션 링크입니다. 유형. . 렌더링 바로가기:

드롭다운 목록 탐색 링크 스타일

예제 코드:

무제한 클래스를 캡슐화했습니다. , diaplayList()를 호출하여 드롭다운 목록 양식을 표시하고 diaplayLink를 호출하여 탐색 링크 카테고리를 표시하는 데 사용됩니다. 범주를 추가(addNodes())하고 삭제(deleteNodes)할 수도 있습니다.

<?<span>php

</span><span>class</span><span> Unlimited{
    </span><span>protected</span><span>$mysqli</span><span>;
    </span><span>public</span><span>function</span> __construct(<span>$config</span><span>){
        </span><span>$this</span>->mysqli=<span>new</span> mysqli(<span>$config</span>['host'],<span>$config</span>['user'],<span>$config</span>['pwd'<span>]);
        </span><span>$this</span>->mysqli->select_db(<span>$config</span>['db'<span>]);
        </span><span>$this</span>->mysqli->set_charset('utf8'<span>);
        </span><span>if</span> (<span>$this</span>->mysqli-><span>connect_errno) {
            </span><span>echo</span><span>$this</span>->mysqli-><span>connect_error;
        }
    }    

    </span><span>private</span><span>function</span> getList(<span>$pid</span>=0,&<span>$result</span>=<span>array</span>(),<span>$spac</span>=0<span>){
        </span><span>$spac</span>=<span>$spac</span>+2<span>;
        </span><span>$sql</span>="select * from onepiece where pid={<span>$pid</span>}"<span>;
        </span><span>$rs</span>=<span>$this</span>->mysqli->query(<span>$sql</span><span>);
        </span><span>while</span>(<span>$row</span>=<span>$rs</span>-><span>fetch_assoc()) {
            </span><span>$row</span>['name']=<span>str_repeat</span>(' &nbsp',<span>$spac</span>).<span>$row</span>['name'<span>];
            </span><span>$result</span>[]=<span>$row</span><span>;
            </span><span>$this</span>->getList(<span>$row</span>['id'],<span>$result</span>,<span>$spac</span><span>);            
        }
        </span><span>return</span><span>$result</span><span>;
    }
    </span><span>/*</span><span>*
     * 展现下拉列表式分类
     * @return [type] 
     </span><span>*/</span><span>public</span><span>function</span><span> displayList(){
        </span><span>$rs</span>=<span>$this</span>-><span>getList();
        </span><span>$str</span>="<select name='cate'>"<span>;

        </span><span>foreach</span> (<span>$rs</span><span>as</span><span>$key</span> => <span>$val</span><span>) {
            </span><span>$str</span>.="<option >{<span>$val</span>['name']}</option>"<span>;
        }
        </span><span>$str</span>.="</select>"<span>;
        </span><span>return</span><span>$str</span><span>;
    }

    </span><span>private</span><span>function</span> getLink(<span>$cid</span>,&<span>$result</span>=<span>array</span><span>()){
        </span><span>$sql</span>="select * from onepiece where id={<span>$cid</span>}"<span>;
        </span><span>$rs</span>=<span>$this</span>->mysqli->query(<span>$sql</span><span>);
        </span><span>if</span>(<span>$row</span>=<span>$rs</span>-><span>fetch_assoc()){
            </span><span>$result</span>[]=<span>$row</span><span>;
            </span><span>$this</span>->getLink(<span>$row</span>['pid'],<span>$result</span><span>);
        }
        </span><span>return</span><span>array_reverse</span>(<span>$result</span><span>);
    }
    </span><span>/*</span><span>*
     * 展现导航Link
     * @param  [type] $cid [description]
     * @return [type]      [description]
     </span><span>*/</span><span>public</span><span>function</span> displayLink(<span>$cid</span><span>){
        </span><span>$rs</span>=<span>$this</span>->getLink(<span>$cid</span><span>);
        </span><span>$str</span>=''<span>;
        </span><span>foreach</span> (<span>$rs</span><span>as</span><span>$val</span><span>) {
            </span><span>$str</span>.="<a href=''>{<span>$val</span>['name']}</a>>"<span>;
        }

        </span><span>return</span><span>$str</span><span>;
    }
    </span><span>/*</span><span>*
     * 增加分类
     * @param [type] $pid  父类id
     * @param [type] $name 本类名
     </span><span>*/</span><span>public</span><span>function</span> addNodes(<span>$pid</span>,<span>$name</span><span>){
        </span><span>$sql</span>="insert into onepiece values('',{<span>$pid</span>},'".<span>$name</span>."')"<span>;
        </span><span>if</span>(<span>$this</span>->mysqli->query(<span>$sql</span><span>)){

            </span><span>return</span><span>true</span><span>;

        }
    }
    </span><span>/*</span><span>*
     * 删除分类
     * @param  [type] $id 本类id
     * @return [type]     
     </span><span>*/</span><span>public</span><span>function</span> deleteNodes(<span>$id</span><span>){
        </span><span>$sql</span>="select * from onepiece where pid ={<span>$id</span>}"<span>;
        </span><span>$rs</span>=<span>$this</span>->mysqli->query(<span>$sql</span><span>);
        </span><span>if</span>(<span>$row</span>=<span>$rs</span>-><span>fetch_assoc()){
            </span><span>$mes</span>="还有子元素,请勿删除"<span>;
        }</span><span>else</span><span>{
            </span><span>$sql</span>="delete from onepiece where id={<span>$id</span>}"<span>;
            </span><span>if</span>(<span>$this</span>->mysqli->query(<span>$sql</span><span>)){
                </span><span>$mes</span>="删除成功"<span>;
            }
        }
        </span><span>return</span><span>$mes</span><span>;
    }
}</span>

수업에서 다루는 함수는 주로 재귀함수 방식을 채택하고 있습니다. 이후 섹션에서 재귀 함수를 구현하는 세 가지 방법을 자세히 설명하겠습니다.

위 내용은 내용의 측면을 포함하여 무한 분류를 달성하기 위해 PHP에서 재귀 함수를 사용하는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

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