构建递归删除函数(在php中)

时间:2010-06-24 10:51:45

标签: php recursion

这是交易。我有一个“树”或“子树”,我想导航并删除每个元素。每个“节点”可能包含指向其下方其他节点的链接(没问题)或者可能包含链接OUTSIDE特定的“树” / “子树”。如何构建仅删除指定树“内”的函数?

3 个答案:

答案 0 :(得分:1)

这与您习惯的递归删除相同。您只需要将链接分开 - 一个用于树内链接的列表,一个用于树外链接的列表。或者,您可以使用一个标记来跟踪每个链接的树内/树外状态 - 但是您必须区分何时建立链接。

答案 1 :(得分:0)

答案 2 :(得分: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