Heim > Backend-Entwicklung > PHP-Tutorial > Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

步履不停
Freigeben: 2023-04-06 21:24:02
Original
2945 Leute haben es durchsucht

Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

Im Allgemeinen wird Rekursion als Aufruf der Funktion selbst bezeichnet.

Praktische Anwendung der Rekursion in der Entwicklung

N-Level-Klassifizierung

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;
Nach dem Login kopieren

Dann virtualisieren wir einige Daten und am Ende sieht es so aus.

Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

Schauen wir uns direkt die Code-Implementierung an.

<?php $dsn = "mysql:host=127.0.0.1;port=3306;dbname=light-tips;charset=UTF8;";
$username = &#39;root&#39;;
$password = &#39;admin&#39;;
$pdo = new PDO($dsn, $username, $password);
$sql = &#39;SELECT * FROM `categories` ORDER BY `parentCategory`, `sortInd`&#39;;
$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);
Nach dem Login kopieren

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.

Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

Unendlich verschachtelte Kommentare

Werfen wir zunächst einen Blick darauf, wie unendlich verschachtelte Kommentare aussehen. Wie im Bild gezeigt:

Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

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;
Nach dem Login kopieren

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 = &#39;root&#39;;
$password = &#39;admin&#39;;
$pdo = new PDO($dsn, $username, $password);
$sql = &#39;SELECT * FROM `comments` WHERE `postID` = :id ORDER BY `parentId`, `datetime`&#39;;
$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);
Nach dem Login kopieren

Dateiscannen

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;
}
Nach dem Login kopieren

Weitere technische Artikel zum Thema PHP finden Sie in der Spalte PHP-Tutorial zum Lernen!

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!

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage