Heim  >  Artikel  >  php教程  >  Einige Anwendungen der Rekursion (2) Unendliche Klassifizierung

Einige Anwendungen der Rekursion (2) Unendliche Klassifizierung

WBOY
WBOYOriginal
2016-08-08 08:49:46790Durchsuche

Verwendung einer rekursiven Methode, um eine unendliche Klassifizierung zu erreichen

Normalerweise, wenn ich Projekte schreibe, zum Beispiel wenn ich etwas wie Einkaufszentrumskategorie schreibe, werde ich die Überlegene Kategorie der entsprechenden Kategorie oder andere Projekte Abteilung implementieren Management Übergeordnete Abteilungen verwenden in der Regel die Infinitus-Klassifikation zur Klassifizierung

Schritt 1: Wenn ich beim Entwerfen der Datentabelle die Infinitus-Klassifizierung implementieren möchte, füge ich der Datentabelle normalerweise ein zusätzliches Feld pid hinzu.

(1) Tabelle erstellen:

----------------------------------

-- Tabellenstruktur für PID

------------------------------------------------

DROP TABLE IF EXISTS `pid`;

TABELLE pid ERSTELLEN (

id tinyint unsigned NOT NULL AUTO_INCREMENT Primärschlüsselkommentar „Primärschlüssel-ID“,

name varchar(32) NOT NULL,

Spitzname varchar(32) DEFAULT NULL,

pid tinyint(10) unsigned DEFAULT NULL,

sort mediumint(10) unsigned DEFAULT 50

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

(2) Daten einfügen:

------------------------------------------------

-- PID-Aufzeichnungen

------------------------------------------------

INSERT INTO `pid` VALUES ('1', 'Technology', '', '0', '50');

INSERT INTO `pid` VALUES ('2', 'Military', '', '0', '50');

INSERT INTO `pid` VALUES ('3', 'Human and Nature', '', '0', '50');

INSERT INTO `pid` VALUES ('4', 'Gourmet', '', '0', '50');

INSERT INTO `pid` VALUES ('5', 'Künstliche Intelligenz', '', '1', '50');

INSERT INTO `pid` VALUES ('6', 'robot', '', '5', '50');

INSERT INTO `pid` VALUES ('7', 'drone', '', '5', '50');

INSERT INTO `pid` VALUES ('8', 'Autonomous Car', '', '5', '50');

INSERT INTO `pid` VALUES ('9', 'Military Robot', 'Haha', '6', '50');

INSERT INTO `pid` VALUES ('10', 'Service Robot', '', '6', '50');

INSERT INTO `pid` VALUES ('11', 'aircraft Carrier', '', '2', '50');

INSERT INTO `pid` VALUES ('12', 'trägergestütztes Flugzeug', '', '2', '50');

INSERT INTO `pid` VALUES ('13', 'Early Warning Aircraft', '', '2', '50');

INSERT INTO `pid` VALUES ('14', 'missile', '', '2', '50');

INSERT INTO `pid` VALUES ('15', 'A Bite of China', '', '3', '50');

INSERT INTO `pid` VALUES ('16', 'Sichuan-Küche', '', '15', '50');

INSERT INTO `pid` VALUES ('17', 'Kantonesisch', '', '15', '50');

INSERT INTO `pid` VALUES ('18', 'Hunan-Küche', '', '15', '50');

INSERT INTO `pid` VALUES ('19', 'bio', '', '4', '50');

INSERT INTO `pid` VALUES ('20', 'animal', '', '19', '50');

INSERT INTO `pid` VALUES ('21', 'Plant', '', '19', '50');

INSERT INTO `pid` VALUES ('26', 'Haha', 'Haha', '0', '50');

INSERT INTO `pid` VALUES ('27', 'Hey hey hey', 'Hey hey hey', '26', '50');

INSERT INTO `pid` VALUES ('28', 'Pssssss', 'ssssssss', '26', '50');

Datenblatt:

Die Datentabelle sieht so aus.

Schritt 2: Kommen Sie auf den Punkt, Infinitus-Klassifizierung

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

Daten verbinden:

Wirkung:

2. Eine kleine Erweiterung:

Dies ist nur mein eigenes Verständnis der Infinitus-Klassifikation und eine Zusammenfassung meiner eigenen Wissenspunkte. Wenn etwas nicht stimmt, hoffe ich, dass Sie mir einige Vorschläge machen können, damit wir gemeinsam lernen und Fortschritte machen können. Danke~

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