如何使用 SPL 检索完整目录树?

发布于 2024-08-24 14:12:49 字数 123 浏览 5 评论 0原文

如何使用 SPL(可能使用 RecursiveDirectoryIteratorRecursiveIteratorIterator)检索完整目录树?

How can I retrieve the full directory tree using SPL, possibly using RecursiveDirectoryIterator and RecursiveIteratorIterator?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吃素的狼 2024-08-31 14:12:49

默认情况下,RecursiveIteratorIterator 将使用 LEAVES_ONLY 作为 __construct。这意味着它将仅返回文件。如果您想包含文件目录(至少这是我认为的完整目录树),您必须这样做:

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);

然后您可以foreach 覆盖它。如果你想返回目录树而不是输出它,你可以将它存储在一个数组中,例如

foreach ($iterator as $fileObject) {
    $files[] = $fileObject;
    // or if you only want the filenames
    $files[] = $fileObject->getPathname();
}

你也可以通过执行以下操作来创建不带 foreach$fileObjects 数组:

$files[] = iterator_to_array($iterator);

如果您只想返回目录,请在 $iteratorforeach ,如下所示:

foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}

By default, the RecursiveIteratorIterator will use LEAVES_ONLY for the second argument to __construct. This means it will return files only. If you want to include files and directories (at least that's what I'd consider a full directory tree), you'd have to do:

$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($path),
    RecursiveIteratorIterator::SELF_FIRST
);

and then you can foreach over it. If you want to return the directory tree instead of outputting it, you can store it in an array, e.g.

foreach ($iterator as $fileObject) {
    $files[] = $fileObject;
    // or if you only want the filenames
    $files[] = $fileObject->getPathname();
}

You can also create the array of $fileObjects without the foreach by doing:

$files[] = iterator_to_array($iterator);

If you only want directories returned, foreach over the $iterator like this:

foreach ($iterator as $fileObject) {
    if ($fileObject->isDir()) {
        $files[] = $fileObject;
    }
}
爱已欠费 2024-08-31 14:12:49

你可以只是,或者做你想做的一切

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}

You can just, or do everythng that you want

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
    /* @var $file SplFileInfo */
    //...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文