簡體   English   中英

PHP將相對URL字符串解析為一個數組/對象

[英]php parse relative url strings into one array/object

拆分這些相對鏈接的最佳解決方案是什么

folder-1/folder-2/item-a.txt
folder-1/folder-2/item-b.txt
folder-1/folder-3/item-c.txt
folder-1/folder-3/item-a.txt
folder-1/item-f.txt
folder-1/folder-2
folder-1/folder-3
folder-1
item-b.txt
item-g.txt

進入PHP數組?

$testArray = array(
    "folder-1/" => array(
        "folder-2" => array(
            "item-a.txt",
            "item-b.txt"
        ),
        "folder-3" => array(
            "item-a.txt",
            "item-c.txt"
        ),
        "item-f.txt"
    ),
    "item-b.txt",
    "item-g.txt",
);

給出最深路徑的深度d和路徑數,就可以在最壞的情況下很簡單地做到這一點O(nk),如果查找是恆定的(在PHP中就是這種情況):

$root = array();

foreach ($I as $i) {
    $d =& $root;
    $P = explode("/", $i);

    foreach ($P as $p) {
        if (!array_key_exists($p, $d))
            $d[$p] = array();

        $d =& $d[$p];
    }
}

您可以通過對輸入進行排序(以確保父目錄出現在任何子目錄之前)的方式對輸入進行排序,從而進一步優化此輸入。

然后,您確定必須添加每個下一個條目(因此array_key_exists -condition是多余的)。 然后,您只需要一個聰明的方法就可以知道將“光標”放在$r 這段代碼可能會更復雜。

我也不完全確定在哪一點上預處理和通過$r導航的成本會提高總體時間復雜度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM