Heim  >  Artikel  >  Backend-Entwicklung  >  PHP verwendet rekursive Funktionen, um eine unendliche Klassifizierung zu erreichen

PHP verwendet rekursive Funktionen, um eine unendliche Klassifizierung zu erreichen

WBOY
WBOYOriginal
2016-08-08 09:18:561070Durchsuche

Ich glaube, dass viele Freunde, die PHP lernen, versuchen werden, ein Online-Einkaufszentrum aufzubauen, um ihre Fähigkeiten zu verbessern. Sie sollten mit verschiedenen Vorgängen zur Produktklassifizierung, Produktnamen usw. vertraut sein, dann können Sie versuchen, unbegrenzte Klassifizierungslisten zu erstellen.

Was ist eine unendliche Klassifizierung?

Die Klassifizierung auf unendlicher Ebene ist eine Klassifizierungstechnik. Beispielsweise wird bei der Abteilungsorganisation, Artikelklassifizierung, Themenklassifizierung usw. häufig eine Klassifizierung auf unendlicher Ebene verwendet. Wenn wir genau darüber nachdenken, gibt es im Leben einfach zu viele Klassifizierungen: Kleidung kann in Herrenbekleidung und Damenbekleidung, Oberteile und Hosen unterteilt werden, und sie können auch nach Altersgruppen klassifiziert werden. Klassifizierung ist überall und Klassifizierung erscheint „unendlich“. Ich werde hier nicht über die Notwendigkeit einer unendlichen Klassifizierung sprechen.

Einführung in das Prinzip der unendlichen Klassifizierung

Die unendliche Klassifizierung mag „hochgesteckt“ erscheinen, aber tatsächlich ist das Prinzip sehr einfach. Eine unbegrenzte Klassifizierung erfordert nicht nur den Einfallsreichtum des Codes, sondern auch die Rationalität des Datenbankdesigns. Um die unendliche Klassifizierung zu erfüllen, muss die Datenbank über zwei notwendige Felder verfügen: id und pid. Die ID wird verwendet, um sich selbst zu identifizieren, während die PID verwendet wird, um die übergeordnete ID anzugeben. Mit anderen Worten: Jeder Klassifizierungsdatensatz beschreibt nicht nur sich selbst, sondern auch eine andere ID, um die er sich am meisten kümmert. Was wie eine komplizierte Angelegenheit erschien, wurde mit so einem kleinen Trick gelöst.

Ohne weitere Umschweife ist es an der Zeit, die Beispiele dieses Artikels zu zeigen.

Als begeisterter Piratenfan werde ich in diesem Artikel die Charakterorganisation von „One Piece“ als Beispiel verwenden.

Datenbankvorbereitung:

Tabelleneinteiler erstellen:

<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>

Testdaten einfügen:

<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>);

Hier ist das Setting in One Piece, basierend auf der Populärwissenschaft: Die Welt ist in drei große Lager geteilt: Marine, Piraten und Revolutionsarmee. Die Marine hat Generäle: Aokiji, Akainu und Kizaru. Zu den Piraten gehören: die Vier Kaiser, die Shichibukai und die Strohhutpiraten. Der Yonko hat Shanks, der Shichibukai hat Doflamingo und Crocodile und die Strohhutpiraten haben Zoro. (Werbung: One Piece ist wirklich gut).

Endziel:

Was wir heute erstellen, sind zwei Formen unendlicher Klassifizierungsformen, eines ist ein Dropdown-Listentyp und das andere ist ein Navigationslink Typ. . Direkt zum Rendering:

Dropdown-Liste Navigationslinkstil

Beispielcode:

Ich habe eine unbegrenzte Klasse gekapselt Wird verwendet, um diaplayList() aufzurufen, um das Dropdown-Listenformular anzuzeigen, und um diaplayLink aufzurufen, um die Navigationslinkkategorie anzuzeigen. Sie können auch Kategorien hinzufügen (addNodes()) und löschen (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>

Die Funktionen in der Klasse übernehmen hauptsächlich die Methode der rekursiven Funktionen. Wenn Sie die rekursiven Funktionen genau verstehen, wird der Rest von selbst funktionieren. Ich werde die drei Möglichkeiten zur Implementierung rekursiver Funktionen in späteren Abschnitten detailliert beschreiben.

Das Obige stellt die Verwendung rekursiver Funktionen in PHP vor, um eine unendliche Klassifizierung zu erreichen, einschließlich Aspekten des Inhalts. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Slowlog-Analysetool v 10Nächster Artikel:Slowlog-Analysetool v 10