91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php設計模式中處理樹形結構數據怎么使用

發布時間:2020-08-07 09:39:57 來源:億速云 閱讀:158 作者:Leah 欄目:編程語言

本篇文章為大家展示了php設計模式中處理樹形結構數據怎么使用,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

 關于組合模式,千萬不要從字面理解,它和我們理解的組合關系沒什么關系,它是用來處理樹狀結構的數據。因為它只能處理樹形結構的數據,所以在日常中并不是很常用,但如果滿足了樹形結構,使用該模式就能非常好的處理,能夠大大減少代碼量,寫出的代碼簡潔明了。

定義

組合模式是一種結構型設計模式, 你可以使用它將對象組合成樹狀結構, 并且能像使用獨立對象一樣使用它們。它的核心就在于遞歸,通過遞歸來依次處理樹形結構數據。

場景

文件目錄樹就是一個典型的樹形結構的數據。下面展示一個用于計算文件或目錄大小的功能的類,主要有兩個方法,添加子節點(子樹)addNode,統計文件或目錄大小fileSize。

class File
{
    private $path = '';
    private $nodes = [];
    private $fileSize = 0;
    
    public function __construct(string $path, int $fileSize)
    {
        $this->path = $path;
        $this->fileSize = $fileSize;
    }
    
    public function addNode (File $node)
    {
        $this->nodes[] = $node;
    }
    
    public function fileSize ()
    {
        $size = 0;
        foreach ($this->nodes as $node) {
            $size += $node->fileSize();
        }
        return $size;
    }
}

下面模擬出以下的目錄樹

/app

/app/1.txt
/app/a
/app/b

/app/a/a1.txt
/app/b/b1.txt
/app/b/b2.txt

測試代碼如下:

$node0 = new File('/app', 0);

$node1 = new File('/app/1.txt', 1000);
$node2 = new File('/app/a', 0);
$node3 = new File('/app/b', 0);

$node21 = new File('/app/a1.txt', 1000);
$node31 = new File('/app/b1.txt', 1000);
$node32 = new File('/app/b2.txt', 1000);

$node2->addNode($node21);
$node3->addNode($node31);
$node3->addNode($node32);
$node0->addNode($node1);
$node0->addNode($node2);
$node0->addNode($node3);

// 計算目錄/app/b大小
echo $node3->fileSize() . 'B' . PHP_EOL; // 2000
// 計算/app目錄大小
echo $node0->fileSize() . 'B' . PHP_EOL; // 4000

總結

組合模式,將一組對象組織成樹形的結構,然后將對象看做是樹的節點。利用樹形的數據結構,使用遞歸來處理每個子樹,依次來簡化代碼實現。因為該模式對于數據有嚴格的要求,所以在日常中用到的并不多。如想使用該模式,需要你對業務場景非常的了解,然后能把數據抽象成樹形結構。一般我們常見的有,文件的目錄樹、無限極分類的處理等等。

上述內容就是php設計模式中處理樹形結構數據怎么使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

榆中县| 乌鲁木齐县| 阿勒泰市| 辽中县| 北碚区| 比如县| 东乌| 博爱县| 乐安县| 康平县| 米林县| 黄山市| 察哈| 东宁县| 红河县| 罗源县| 荃湾区| 商都县| 绩溪县| 陇西县| 寿阳县| 杭州市| 玉山县| 大庆市| 金山区| 西盟| 雅江县| 淅川县| 伊春市| 汉阴县| 宜丰县| 巴彦县| 云林县| 镇平县| 华池县| 沙洋县| 略阳县| 通河县| 许昌县| 遵义市| 高雄市|