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

Unbegrenzte Klassifizierung und unendlich viele verschachtelte Kommentare in PHP

不言
不言Original
2018-07-07 15:42:141718Durchsuche

Dieser Artikel stellt hauptsächlich die unendliche Klassifizierung und die unendlichen verschachtelten Kommentare in PHP vor. Jetzt kann ich ihn mit Ihnen teilen

Rezension

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.

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;

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);

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;

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);

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

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

Methode 2 zur Verwendung von XHProf zur Analyse von PHP-Leistungsengpässen

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!

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