这里的问题是,我有一个“树”或“子树”,我想遍历并删除其中的每个元素。每个“节点”可能包含指向其下方的其他节点的链接(没有问题),也可能包含指向特定“树”/“子树”之外的链接。如何构建仅在指定树“内部”删除的函数?
这里的问题是,我有一个“树”或“子树”,我想遍历并删除其中的每个元素。每个“节点”可能包含指向其下方的其他节点的链接(没有问题),也可能包含指向特定“树”/“子树”之外的链接。如何构建仅在指定树“内部”删除的函数?
这是您熟悉的相同递归删除。您只需要保持链接分开 - 一个用于树内链接,另一个用于树外链接。或者,您可以有一个标志来跟踪每个链接的树内/树外状态 - 但是在创建链接时,您将不得不进行区分。
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