国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

Shisui / 2045人閱讀

摘要:可以看到,我們首先獲取到了所有的數據,然后按照父級歸類。無限嵌套評論先來看下這個無限嵌套評論長什么樣子。文件掃描使用遞歸進行目錄文件的掃描的栗子。

回顧

上一篇文章我們講到實戰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;

然后我們虛擬出一些數據出來,最后長這個樣子。

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

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;

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

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);
文件掃描

使用遞歸進行目錄文件的掃描的栗子。

 $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;
}
更多內容

PHP基礎數據結構專題系列目錄地址:地址 主要使用PHP語法總結基礎的數據結構和算法。還有我們日常PHP開發中容易忽略的基礎知識和現代PHP開發中關于規范、部署、優化的一些實戰性建議,同時還有對Javascript語言特點的深入研究。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95991.html

相關文章

  • PHP中的無限分類無限嵌套評論

    摘要:可以看到,我們首先獲取到了所有的數據,然后按照父級歸類。無限嵌套評論先來看下這個無限嵌套評論長什么樣子。文件掃描使用遞歸進行目錄文件的掃描的栗子。 回顧 上一篇文章我們講到實戰PHP數據結構基礎之遞歸。來回顧下什么是遞歸? 一般來說,遞歸被稱為函數自身的調用。 遞歸在開發中的實際運用 N級分類 無限級的分類在平常的開發中是常見的需求,并且在不少面試題中都會碰到。不管你做什么項目,應該都...

    李義 評論0 收藏0
  • 使用 Baum 嵌套集合模型來實現 Laravel 模型的無限分類

    摘要:本文經授權轉自社區使用嵌套集合模型來實現模型的無限極分類說明大家通常都是使用遞歸實現無限極分類,都知道遞歸效率很低,下面推薦一個的擴展包,快速讓你的數據模型支持無限極樹狀層級結構,并且兼顧效率。 本文經授權轉自 PHPHub 社區 使用 Baum 嵌套集合模型來實現 Laravel 模型的無限極分類 說明 大家通常都是使用遞歸實現無限極分類,都知道遞歸效率很低,下面推薦一個 Larav...

    superPershing 評論0 收藏0
  • PHP框架之ThinkPHP模塊開發系列八,無限分類的刪除

    摘要:我們在新建一個刪除前的鉤子函數,再利用遞歸方法實現子欄目的刪除。最后我們刪除把鉤子函數恢復到原始狀態在瀏覽器中輸入,然后點擊美國一欄中的刪除,此時會同時刪除美國下的紐約。至此,無限級分類的刪除功能操作完畢。 在此現更正一下之前的預告,之前忘記了先應該把無限級分類欄目列表功能做完,也就是刪除功能還沒做,所以今天我們先做刪除,下一節再做面包屑導航。非常抱歉。 同時,不知道是什么原因,上一節...

    BWrong 評論0 收藏0
  • PHP 無限分類最佳實踐

    無限級分類 是一種很常見,很必須的功能,幾乎每個項目都有。 應用場景:下拉列表,樹型列表等 無限級分類的類型 前端實現(前端框架一般已經實現好了,只要后端按照指定格式傳數據給前端就可以生成了) 后端實現(下面主要講這種實現) 無限級多種實現 第一種(推薦) function infiniteSort($data, $showFName, $titleFName, $pidFName = p...

    yzzz 評論0 收藏0
  • 超優雅!兩行代碼搞定 php 無限分類 獲取頂分類ID

    摘要:有這樣一個表,是分類的,是分類名稱,是上級分類的。現在有個分類,程序要找到它上級的上級的上級分類的,簡單說就是找出頂級分類的。比如新鮮水果的是,對應父類是,而的父是,沒有父類,也就是頂級分類了。 有這樣一個表,id是分類的ID,name是分類名稱,pid是上級分類的ID。showImg(https://segmentfault.com/img/bVtnrg); 現在有個分類ID,程序要...

    hedzr 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<