【问题标题】:How can I retrieve the full directory tree using SPL?如何使用 SPL 检索完整的目录树?
【发布时间】:2011-01-25 23:02:35
【问题描述】:

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

【问题讨论】:

    标签: php spl


    【解决方案1】:

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

    $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();
    }
    

    您还可以通过以下方式创建 $fileObjects 的数组而不使用 foreach

    $files[] = iterator_to_array($iterator);
    

    如果您只希望返回目录,foreach$iterator 上,如下所示:

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

    【讨论】:

      【解决方案2】:

      你可以做任何你想做的事

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

      【讨论】:

      • 嗨,我不明白的是,如何从RecursiveIteratorIterator 的 PHP 文档中推断出 $file 的类型是 SplFileInfo ?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多