构建一个递归删除函数(使用php)

6

这里的问题是,我有一个“树”或“子树”,我想遍历并删除其中的每个元素。每个“节点”可能包含指向其下方的其他节点的链接(没有问题),也可能包含指向特定“树”/“子树”之外的链接。如何构建仅在指定树“内部”删除的函数?


3
你可能希望提供一个示例结构和期望的输出 - Gordon
请举一个关于“树”的例子,并说明删除操作应如何进行。 - salathe
1
我怀疑这不是作业,因为现在已经是六月底了。 - Michael Stone
如果一个节点指向另一个节点,则“另一个”节点是树的一部分。或者,如果其他树中的节点指向您要删除的节点,该怎么办?也许您可以澄清一下? - Scott Evernden
3个回答

1

这是您熟悉的相同递归删除。您只需要保持链接分开 - 一个用于树内链接,另一个用于树外链接。或者,您可以有一个标志来跟踪每个链接的树内/树外状态 - 但是在创建链接时,您将不得不进行区分。


0
你需要使用 realpath() 函数:
function DeleteTree($path)
{
    if (is_dir($path) === true)
    {
        $path = realpath($path);
        $files = array_diff(scandir($path), array('.', '..'));

        foreach ($files as $file)
        {
            $file = realpath($path . '/' . $file);

            // file is within tree
            if (substr($file, 0, strlen($path)) == $path)
            {
                DeleteTree($file);
            }
        }

        return rmdir($path);
    }

    else if (is_file($path) === true)
    {
        return unlink($path);
    }

    return false;
}

以上代码应该可以满足你的需求。

哦...我刚意识到这可能与文件系统无关... 这个错误是你的错!:P


0

这个链接可能有用,但是一些简短的解释会使答案更相关。 - slashingweapon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接