Heim  >  Artikel  >  PHP-Framework  >  Verwendung von ThinkPHP6 zur Implementierung einer rekursiven Baumstruktur

Verwendung von ThinkPHP6 zur Implementierung einer rekursiven Baumstruktur

王林
王林Original
2023-06-20 14:48:101023Durchsuche

Mit der Entwicklung des Internets sind baumstrukturierte Darstellungen in verschiedenen Websites und Anwendungen aufgetaucht, beispielsweise in Klassifizierungsverzeichnissen, Personalorganisationsstrukturen, Berechtigungsverwaltung usw. In diesen Anwendungsszenarien ist die rekursive Baumstruktur zu einem der sehr wichtigen und praktischen Modelle geworden.

ThinkPHP6 ist ein PHP-Entwicklungsframework, das auf dem MVC-Modell basiert. Es verfügt über eine umfangreiche Erweiterungsbibliothek und eine hervorragende Leistung und wird von Entwicklern weithin anerkannt und verwendet. Außerdem ist es einfacher geworden, rekursive Baumstrukturen in ThinkPHP6 zu implementieren.

Im Folgenden stellen wir vor, wie man rekursive Funktionen zum Aufbau einer Baumstruktur in ThinkPHP6 verwendet.

1. Definieren Sie die Datenbankstruktur

Bevor Sie die rekursive Baumstruktur implementieren, müssen Sie zunächst wissen, wie Daten in der Datenbank gespeichert werden, damit die Anwendung sie verarbeiten kann. In diesem Beispiel erstellen wir eine „Kategorie“-Tabelle und speichern Informationen wie Kategoriename, Kategorie-ID, übergeordnete ID usw. in der Kategorietabelle.

Die Struktur der Klassifizierungstabelle ist wie folgt:

id int(11) Primärschlüssel
name varchar(50) Kategoriename
parent_id int(11) Elternkategorie-ID

2. Implementieren Sie die rekursive Funktion

Als nächstes brauchen wir um eine Rekursionsfunktion zu implementieren, mit der alle untergeordneten Knoten ab dem Wurzelknoten abgefragt werden. In ThinkPHP6 können Sie die Select-Methode in Kombination mit dem Parameter $where verwenden, um bestimmte Spalten abzufragen, zum Beispiel:

Db::name('classification table')->where('parent_id',$id)-> select ();

In diesem Beispiel ist $id der an die rekursive Funktion übergebene Parameter und stellt die ID des aktuellen Knotens dar. Die rekursive Funktion fragt rekursiv alle untergeordneten Knoten des Knotens basierend auf der ID ab.

Das Folgende ist die Implementierung der rekursiven Funktion:

function getChildren($id){
    //查询该节点下的所有子节点
    $children=Db::name('分类表')->where('parent_id',$id)->select();
    //如果没有子节点,返回空数组
    if(empty($children)){
        return $children;
    }
    //递归查询子节点的子节点,并将结果合并到$children数组中
    foreach($children as $k=>$v){
        $children[$k]['children']=$this->getChildren($v['id']);
    }
    return $children;
} 

In dieser Funktion fragen wir zunächst alle untergeordneten Knoten unter diesem Knoten ab und speichern die Ergebnisse im Array $children. Wenn der Knoten keine untergeordneten Knoten hat, wird direkt ein leeres Array zurückgegeben.

Als nächstes verwenden wir eine foreach-Schleife, um jeden untergeordneten Knoten im $children-Array zu durchlaufen und rufen die rekursive Funktion auf, um alle untergeordneten Knoten dieses untergeordneten Knotens abzufragen. Führen Sie die Ergebnisse im Array $children zusammen und geben Sie schließlich das gesamte Array $children zurück.

3. Baumstruktur ausgeben

Nachdem die rekursive Funktion die Informationen des Knotens und aller seiner untergeordneten Knoten erhalten hat, müssen wir sie als Baumstruktur ausgeben. Dies kann erreicht werden, indem das von der rekursiven Funktion zurückgegebene Array durchlaufen und die entsprechenden Einrückungssymbole basierend auf der Tiefe jedes Knotens ausgegeben werden.

Das Folgende ist der Code zur Ausgabe der Baumstruktur:

function outputTree($arr,$deep=0){
    //定义缩进符号
    $symbol='|--';
    $html='';
    
    foreach($arr as $v){
        //根据节点深度输出缩进符号
        $html.=str_repeat('       ',$deep).$symbol.$v['name'].'<br/>';
        //如果有子节点,继续遍历
        if(!empty($v['children'])){
            $html.=$this->outputTree($v['children'],$deep+1);
        }
    }
    
    return $html;
}

In dieser Funktion definieren wir zuerst das Einrückungssymbol und durchlaufen dann jeden Knoten im Array rekursiv. Gibt die entsprechende Anzahl von Einrückungssymbolen basierend auf der Tiefe des aktuellen Knotens aus. Wenn ein Knoten untergeordnete Knoten hat, fahren Sie mit dem rekursiven Durchlaufen aller untergeordneten Knoten des Knotens fort.

Abschließend lautet der Code zur Ausgabe der gesamten Baumstruktur wie folgt:

$id=0;
$arr=$this->getChildren($id);
$html=$this->outputTree($arr);
echo $html;

In diesem Code stellt $id die ID des Wurzelknotens dar. Wir rufen zuerst die rekursive Funktion auf, um die Informationen aller untergeordneten Knoten abzurufen, und dann Rufen Sie die Funktion auf, die die Baumstruktur ausgibt, und geben Sie die gesamte Baumstruktur auf der HTML-Seite aus.

4. Zusammenfassung

Durch die Verwendung der umfangreichen Erweiterungsbibliothek und der rekursiven Funktionen von ThinkPHP6 können wir problemlos eine rekursive Baumstruktur erstellen, wodurch die Anwendung einfacher zu verwalten und zu verwenden ist. Ich hoffe, dass dieser Artikel Ihnen bei Ihrer Entwicklungsarbeit beim Aufbau einer Baumstruktur helfen kann, damit Sie die Aufgabe effizienter erledigen können.

Das obige ist der detaillierte Inhalt vonVerwendung von ThinkPHP6 zur Implementierung einer rekursiven Baumstruktur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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