PHP中的無限級分類和無限嵌套評論

來源:互聯網
上載者:User
這篇文章主要介紹了關於PHP中的無限級分類和無限嵌套評論,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

回顧

上一篇文章我們講到實戰PHP資料結構基礎之遞迴。來回顧下什麼是遞迴?

一般來說,遞迴被稱為函數自身的調用。

遞迴在開發中的實際運用

N級分類

無限級的分類在平常的開發中是常見的需求,並且在不少面試題中都會碰到。不管你做什麼項目,應該都碰到過類似的問題。下面,我們就使用遞迴的思想,實戰一把。

  • SQL結構

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;

然後我們虛擬出一些資料出來,最後長這個樣子。

下面 我們直接看代碼實現。

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

可以看到,我們首先擷取到了所有的資料,然後按照父級ID歸類。這是一個非常棒的資料結構。想象一下,我們把展示頂級目錄下所有子目錄的問題分解成了展示自己的類目標題和展示資料中parentCategory為目前的目錄id的子目錄,然後使用開始遞迴調用。最後的輸出是這個樣子的。

無限嵌套評論

先來看下這個 無限嵌套評論長什麼樣子。

上面的栗子,又是一個經典的可以使用遞迴解決的案例。還是來看下資料結構。

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;

大家可以自己實踐一遍,先不要看下面的內容。

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

檔案掃描

使用遞迴進行目錄檔案的掃描的栗子。

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

以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.