拆分这些相对链接的最佳解决方案是什么
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",
);
答案 0 :(得分:2)
考虑到最深路径的深度d
和路径数量,你可以在最坏情况下完成O(nk),只要查找是常量(在PHP中就是这种情况):< / p>
$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
- 条件是多余的)。然后,您只需要一种聪明的方法来了解将“光标”放在$r
中的位置。这段代码可能有点复杂。
此外,我不完全确定预处理和$r
导航的成本将在一般时间复杂度中受益。