gpt4 book ai didi

PHP 使用 SPL 迭代器递归删除空目录

转载 作者:可可西里 更新时间:2023-11-01 13:16:33 26 4
gpt4 key购买 nike

我正在为如何使用 SPL 迭代器删除 PHP 中的空目录树而苦恼。考虑以下目录结构,其中所有目录都是空的:

/topdir

  level1

level2

我试过以下方法:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
'/topdir', RecursiveIteratorIterator::CHILD_FIRST
));

foreach ($it as $file) {
if ($file->isDir()) {
rmdir((string)$file);
}
}

但是 RecursiveIteratorIterator::CHILD_FIRST 阻止了底层文件成为循环的一部分,我得到了标准的 Directory not empty E_WARNING 因为 level1 不为空。

如何使用 SPL 迭代器递归删除空目录树?注意:我知道如何使用 globscandir 等来做到这一点。请不要提供这些/类似功能作为解决方案。

我觉得我必须在这里遗漏一些非常基本的东西......

最佳答案

真正访问子目录的是 RecursiveIteratorIteratorRecursiveDirectoryIterator 只提供它的句柄。

因此,您需要在 RecursiveIteratorIterator 而不是 RecursiveDirectoryIterator 上设置 CHILD_FIRST 标志:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/topdir', FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($it as $file) {
if ($file->isDir()) {
rmdir((string)$file);
}
}

要防止警告,还要将 ::SKIP_DOTS 标志添加到 RecursiveDirectoryIterator

关于PHP 使用 SPL 迭代器递归删除空目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10609805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com