[英]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.