Heim > Artikel > Backend-Entwicklung > Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP
Dieser Artikel stellt hauptsächlich die unendliche Klassifizierung und die unendlichen verschachtelten Kommentare in PHP vor. Jetzt kann ich ihn mit Ihnen teilen
Im letzten Artikel haben wir über Rekursion gesprochen, die Grundlage der praktischen PHP-Datenstruktur. Sehen wir uns an, was Rekursion ist.
Im Allgemeinen wird Rekursion als Aufruf der Funktion selbst bezeichnet.
Die Klassifizierung auf unendlicher Ebene ist eine häufige Anforderung in der täglichen Entwicklung und wird in vielen Interviewfragen berücksichtigt, auf die man stößt. Unabhängig davon, welches Projekt Sie durchführen, sollten Sie auf ähnliche Probleme gestoßen sein. Als nächstes werden wir die Idee der Rekursion in der Praxis anwenden.
SQL-Struktur
CREATE TABLE `categories` ( `id` int(11) NOT NULL AUTO_INCREMENT, `categoryName` varchar(100) NOT NULL, `parentCategory` int(11) DEFAULT '0', `sortInd` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
Dann virtualisieren wir einige Daten und am Ende sieht es so aus.
Schauen wir uns direkt die Code-Implementierung an.
<?php $dsn = "mysql:host=127.0.0.1;port=3306;dbname=light-tips;charset=UTF8;"; $username = 'root'; $password = 'admin'; $pdo = new PDO($dsn, $username, $password); $sql = 'SELECT * FROM `categories` ORDER BY `parentCategory`, `sortInd`'; $result = $pdo->query($sql, PDO::FETCH_OBJ); $categories = []; foreach ($result as $category) { $categories[$category->parentCategory][] = $category; } function showCategoryTree($categories, $n) { if (isset($categories[$n])) { foreach ($categories[$n] as $category) { echo str_repeat('-', $n) . $category->categoryName . PHP_EOL; showCategoryTree($categories, $category->id); } } return; } showCategoryTree($categories, 0);
Wie Sie sehen können, haben wir zuerst alle Daten erhalten und sie dann entsprechend der Eltern-ID klassifiziert. Das ist eine großartige Datenstruktur. Stellen Sie sich vor, wir zerlegen das Problem der Anzeige aller Unterverzeichnisse unter dem Verzeichnis der obersten Ebene in die Anzeige des eigenen Kategorietitels und die Anzeige des Unterverzeichnisses, dessen parentCategory die aktuelle Verzeichnis-ID in den Daten ist, und verwenden dann den rekursiven Aufruf. Die endgültige Ausgabe sieht so aus.
Werfen wir zunächst einen Blick darauf, wie unendlich verschachtelte Kommentare aussehen. Wie im Bild gezeigt:
Die Kastanie oben ist ein weiterer klassischer Fall, der durch Rekursion gelöst werden kann. Werfen wir einen Blick auf die Datenstruktur.
CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `comment` varchar(500) NOT NULL, `username` varchar(50) NOT NULL, `datetime` datetime NOT NULL, `parentID` int(11) NOT NULL, `postID` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
Sie können es selbst üben, ohne den Inhalt unten zu lesen.
<?php $dsn = "mysql:host=127.0.0.1;port=3306;dbname=light-tips;charset=UTF8;"; $username = 'root'; $password = 'admin'; $pdo = new PDO($dsn, $username, $password); $sql = 'SELECT * FROM `comments` WHERE `postID` = :id ORDER BY `parentId`, `datetime`'; $stmt = $pdo->prepare($sql); $stmt->setFetchMode(PDO::FETCH_OBJ); $stmt->execute([':id' => 1]); $result = $stmt->fetchAll(); $comments = []; foreach ($result as $comment) { $comments[$comment->parentID][] = $comment; } function showComments(array $comments, $n) { if (isset($comments[$n])) { foreach ($comments[$n] as $comment) { echo str_repeat('-', $n) . $comment->comment . PHP_EOL; showComments($comments, $comment->id); } } return; } showComments($comments, 0);
Ein Beispiel für das Scannen von Verzeichnisdateien mithilfe der Rekursion.
<?php function showFiles(string $dir, array &$allFiles) { $files = scandir($dir); foreach ($files as $key => $value) { $path = realpath($dir . DIRECTORY_SEPARATOR . $value); if (!is_dir($path)) { $allFiles[] = $path; } else if ($value != "." && $value != "..") { showFiles($path, $allFiles); $allFiles[] = $path; } } return; } $files = []; showFiles('.', $files); foreach ($files as $file) { echo $file . PHP_EOL; }
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Rekursion basierend auf der PHP-Datenstruktur
Das obige ist der detaillierte Inhalt vonUnbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!