


Zwei Möglichkeiten zur Implementierung einer unbegrenzten Klassifizierung in PHP
Dieser Artikel ist in zwei Situationen unterteilt und stellt die Implementierung der unendlichen Klassifizierung in PHP mit und ohne Rekursion vor. Unendliche Klassifizierung ist in unserem Entwicklungsprozess sehr verbreitet, in der wir häufig die unbegrenzte Klassifizierung von PHP verwenden Unsere zukünftige Entwicklung, also sollten wir sie beherrschen. Freunde, die nicht wissen, wie man eine unendliche Klassifizierung in PHP implementiert, können auf diesen Artikel verweisen
Nachdem ich so lange in PHP gearbeitet habe, habe ich festgestellt, dass dies ein unverzichtbares Anwendungsmodul ist Das Backend-Verwaltungssystem ist die Klassifizierung von Spalten. Im Allgemeinen sollten die Spalten in unendliche Ebenen unterteilt werden, was bedeutet, dass jede Spalte theoretisch Unterspalten hinzufügen kann. Meiner Meinung nach ist der Umgang mit dieser Situation insgesamt nicht sehr kompliziert. Der einzige relativ schwierige Punkt ist die Abfrage unendlicher Spalten.
Lassen Sie mich Ihnen eine kurze Einführung in diese Situation geben. Es gibt im Allgemeinen zwei Möglichkeiten, diese Art von unendlicher Spalte abzufragen, und die andere ist die Verwendung von rekursiv Funktion (natürlich wird der rekursive Funktionsimplementierungsmechanismus auch mit Hilfe des Stapels implementiert). Wir werden diese beiden Methoden im Folgenden separat vorstellen.
So implementieren Sie rekursive Funktionen
Wie oben erwähnt, werden rekursive Funktionen auch mit Hilfe des Stack-Mechanismus implementiert, die zugrunde liegende Stack-Verarbeitung ist jedoch für Programmierer schwierig. Es ist transparent und Programmierer müssen sich nur um die Implementierungslogik der Anwendung kümmern. Daher ist die Verwendung der Rekursion zur Lösung der oben genannten Probleme einfacher zu verstehen und der Code ist relativ prägnant.
Da eine rekursive Funktion verwendet wird, wissen wir anhand des Namens, dass wir eine benutzerdefinierte Funktion verwenden müssen. Lassen Sie mich zunächst kurz auf die Implementierungsideen eingehen, dann werden wir die spezifischen Details im Code widerspiegeln.
Die Hauptaufgabe der Funktion jeder Ebene besteht darin, die Spalte zu finden, deren übergeordnete ID die aktuelle ID ist. Nachdem Sie sie gefunden haben, rufen Sie die eigene Funktion erneut auf und verwenden Sie die ID der gefundenen Spalte als übergeordnete ID der nächsten Ebene.
Das Flussdiagramm sieht wie folgt aus
Abbildung 1
Ich weiß nicht, ob Sie die obige Erklärung verstehen können, sie tut es Egal, schauen wir uns den Code direkt unten an
<?php $channels = array( array('id'=>1,'name'=>"衣服",'parId'=>0), array('id'=>2,'name'=>"书籍",'parId'=>0), array('id'=>3,'name'=>"T恤",'parId'=>1), array('id'=>4,'name'=>"裤子",'parId'=>1), array('id'=>5,'name'=>"鞋子",'parId'=>1), array('id'=>6,'name'=>"皮鞋",'parId'=>5), array('id'=>7,'name'=>"运动鞋",'parId'=>5), array('id'=>8,'name'=>"耐克",'parId'=>7), array('id'=>9,'name'=>"耐克",'parId'=>3), array('id'=>10,'name'=>"鸿星尔克",'parId'=>7), array('id'=>11,'name'=>"小说",'parId'=>2), array('id'=>12,'name'=>"科幻小说",'parId'=>11), array('id'=>13,'name'=>"古典名著",'parId'=>11), array('id'=>14,'name'=>"文学",'parId'=>2), array('id'=>15,'name'=>"四书五经",'parId'=>14) ); $html = array(); /** * 递归查找父id为$parid的结点 * @param array $html 按照父-》子的结构存放查找出来的结点 * @param int $parid 指定的父id * @param array $channels 数据数组 * @param int $dep 遍历的深度,初始化为1 */ function getChild(&$html,$parid,$channels,$dep){ /* * 遍历数据,查找parId为参数$parid指定的id */ for($i = 0;$i<count($channels);$i++){ if($channels[$i]['parId'] == $parid){ $html[] = array('id'=>$channels[$i]['id'],'name'=>$channels[$i]['name'],'dep'=>$dep); getChild($html,$channels[$i]['id'],$channels,$dep+1); } } } getChild($html,0,$channels,1); ?>
Dies ist der Kerncode für die rekursive Implementierung einer unendlichen Spaltenabfrage. Sie sollten den Implementierungsprozess anhand von Abbildung 1 besser verstehen.
Nicht rekursiv, das heißt, die Abfrage unendlicher Spalten wird mithilfe des Stapelmechanismus realisiert.
Oben haben wir kurz die Verwendung der Rekursion zum Abfragen unendlicher Spalten vorgestellt , wie folgt: Lassen Sie uns kurz die nicht-rekursive Methode vorstellen. Obwohl keine rekursiven Funktionen verwendet werden, ist es angesichts der Strukturseite unendlicher Spalten erforderlich, auf den rekursiven Implementierungsmechanismus – den Stapelmechanismus – zu verweisen, um dieses Problem zu lösen.
Als ich in der Schule war, sagte mein Lehrer, dass der Kernmechanismus eines Stapels eigentlich nur aus vier Wörtern besteht: zuerst rein, zuletzt raus.
Ich werde hier nicht viel über den Mechanismus des Stapels sprechen, sondern hauptsächlich darüber, wie man den Stapel verwendet, um unbegrenzte Spaltenabfragen zu implementieren.
1. Schieben Sie zuerst die oberste Säule auf den Stapel
2. Nehmen Sie das oberste Element vom Stapel
3. Speichern Sie das herausgenommene Element im Array und markieren Sie seine Tiefe (seine Tiefe soll 1 zur Tiefe seiner übergeordneten Spalte addieren)
4 Übergeordnete Spalte, finden Sie ihre Unterspalte
5. Schieben Sie die gefundene Unterspalte in den Stapel, wiederholen Sie Schritt 2
6 ob der Stapel leer ist. Wenn ja, endet der Prozess.
Durch die Übersetzung der obigen Schritte können diese Schritte in PHP-Code übersetzt werden, und der Kerncode lautet wie folgt
<?php $channels = array( array('id'=>1,'name'=>"衣服",'parId'=>0), array('id'=>2,'name'=>"书籍",'parId'=>0), array('id'=>3,'name'=>"T恤",'parId'=>1), array('id'=>4,'name'=>"裤子",'parId'=>1), array('id'=>5,'name'=>"鞋子",'parId'=>1), array('id'=>6,'name'=>"皮鞋",'parId'=>5), array('id'=>7,'name'=>"运动鞋",'parId'=>5), array('id'=>8,'name'=>"耐克",'parId'=>7), array('id'=>9,'name'=>"耐克",'parId'=>3), array('id'=>10,'name'=>"鸿星尔克",'parId'=>7), array('id'=>11,'name'=>"小说",'parId'=>2), array('id'=>12,'name'=>"科幻小说",'parId'=>11), array('id'=>13,'name'=>"古典名著",'parId'=>11), array('id'=>14,'name'=>"文学",'parId'=>2), array('id'=>15,'name'=>"四书五经",'parId'=>14) ); $stack = array(); //定义一个空栈 $html = array(); //用来保存各个栏目之间的关系以及该栏目的深度 /* * 自定义入栈函数 */ function pushStack(&$stack,$channel,$dep){ array_push($stack, array('channel'=>$channel,'dep'=>$dep)); } /* * 自定义出栈函数 */ function popStack(&$stack){ return array_pop($stack); } /* * 首先将顶级栏目压入栈中 */ foreach($channels as $key=>$val){ if($val['parId'] == 0) pushStack($stack,$val,0); } /* * 将栈中的元素出栈,查找其子栏目 */ do{ $par = popStack($stack); //将栈顶元素出栈 /* * 查找以此栏目为父级栏目的id,将这些栏目入栈 */ for($i=0;$i<count($channels);$i++){ if($channels[$i]['parId'] == $par['channel']['id']){ pushStack($stack,$channels[$i],$par['dep']+1); } } /* * 将出栈的栏目以及该栏目的深度保存到数组中 */ $html[] = array('id'=>$par['channel']['id'],'name'=>$par['channel']['name'],'dep'=>$par['dep']); }while(count($stack)>0);
Das Obige wird mit einer nicht rekursiven Methode implementiert.
Code herunterladen: https://github.com/onmpw/phpApp
Zusammenfassung
Die beiden oben genannten Methoden haben ihre eigenen Vor- und Nachteile. Obwohl die oben genannten Implementierungsformen unterschiedlich sind, ist der Implementierungsmechanismus beider angesichts der Struktur der Spalte auf unendlicher Ebene derselbe: Beide werden mithilfe des Stapels implementiert. In realen Situationen müssen wir einen Weg zur Umsetzung wählen, der auf den Bedürfnissen der realen Situation basiert.
Empfohlener Artikel:
PHP zur Realisierung eines unendlichen Klassifizierungsbaums
Anleitung in PHP Infinite-Klassifizierungsbaum implementieren? In diesem Artikel wird hauptsächlich die Methode zur einfachen Implementierung einer unendlichen Klassifizierungsbaumliste in PHP vorgestellt...
Der Entwicklungsprozess und die Beispielanalyse der unbegrenzten PHP-Klassifizierung
In unserer täglichen Arbeit Leben Bei der Arbeit stoßen wir oft auf viele Klassifizierungen. Wir wissen, dass die unendlichen Klassifizierungen vieler Open-Source-Software rekursive Algorithmen verwenden ...
Das obige ist der detaillierte Inhalt vonZwei Möglichkeiten zur Implementierung einer unbegrenzten Klassifizierung in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Wenn Sie ein erfahrener PHP-Entwickler sind, haben Sie möglicherweise das Gefühl, dass Sie dort waren und dies bereits getan haben. Sie haben eine beträchtliche Anzahl von Anwendungen entwickelt, Millionen von Codezeilen debuggt und eine Reihe von Skripten optimiert, um op zu erreichen

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

Eine Zeichenfolge ist eine Folge von Zeichen, einschließlich Buchstaben, Zahlen und Symbolen. In diesem Tutorial wird lernen, wie Sie die Anzahl der Vokale in einer bestimmten Zeichenfolge in PHP unter Verwendung verschiedener Methoden berechnen. Die Vokale auf Englisch sind a, e, i, o, u und sie können Großbuchstaben oder Kleinbuchstaben sein. Was ist ein Vokal? Vokale sind alphabetische Zeichen, die eine spezifische Aussprache darstellen. Es gibt fünf Vokale in Englisch, einschließlich Großbuchstaben und Kleinbuchstaben: a, e, ich, o, u Beispiel 1 Eingabe: String = "TutorialPoint" Ausgabe: 6 erklären Die Vokale in der String "TutorialPoint" sind u, o, i, a, o, ich. Insgesamt gibt es 6 Yuan

Statische Bindung (statisch: :) implementiert die späte statische Bindung (LSB) in PHP, sodass das Aufrufen von Klassen in statischen Kontexten anstatt Klassen zu definieren. 1) Der Analyseprozess wird zur Laufzeit durchgeführt.

Was sind die magischen Methoden von PHP? Zu den magischen Methoden von PHP gehören: 1. \ _ \ _ Konstrukt, verwendet, um Objekte zu initialisieren; 2. \ _ \ _ Destruct, verwendet zur Reinigung von Ressourcen; 3. \ _ \ _ Call, behandeln Sie nicht existierende Methodenaufrufe; 4. \ _ \ _ GET, Implementieren Sie den dynamischen Attributzugriff; 5. \ _ \ _ Setzen Sie dynamische Attributeinstellungen. Diese Methoden werden in bestimmten Situationen automatisch aufgerufen, wodurch die Code -Flexibilität und -Effizienz verbessert werden.
