【问题标题】:PHP RecursiveDirectoryIterator Self_first isnt workingPHP RecursiveDirectoryIterator Self_first 不起作用
【发布时间】:2014-05-12 23:37:19
【问题描述】:

我试图以自我优先顺序遍历文件树,因此我希望目录中的文件在进入下一个级别之前首先列出。然而,由于某种原因,这并没有发生。请在下面找到我的代码

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($f["path"],   RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST);

foreach ($it as $fileObject) {
    echo $fileObject."\n";
}

这将打印以下示例(如果我的输入目录是 /data/documents/

  • /data/documents/文件名1.pdf
  • /data/documents/文件名2.pdf
  • /data/documents/dir A/file 4.jpg
  • /data/documents/dir A
  • /data/documents/文件名5.pdf
  • /data/documents/dirB/filex.pdf
  • /data/documents/dirB/filey.jpg
  • /data/documents/dirB/dirC/filew.pdf
  • /data/documents/dirB/dirC/filev.pdf
  • /data/documents/dirB/dirC
  • /data/documents/dirB
  • /data/documents/文件名r.pdf

是的,文件和目录有时在其命名中都有空格。我在命令行上运行它,使用 php 版本 PHP 5.3.3 (cli)(构建时间:2013 年 12 月 11 日 03:29:57)

任何帮助将不胜感激。

更新: 我希望得到以下输出;

  • /data/documents/dir A
  • /data/documents/dir A/file 4.jpg
  • /data/documents/dirB
  • /data/documents/dirB/filex.pdf
  • /data/documents/dirB/filey.jpg
  • /data/documents/dirB/dirC
  • /data/documents/dirB/dirC/filew.pdf
  • /data/documents/dirB/dirC/filev.pdf
  • /data/documents/文件名1.pdf
  • /data/documents/文件名2.pdf
  • /data/documents/文件名5.pdf
  • /data/documents/文件名r.pdf

【问题讨论】:

  • 你的意思是,子目录应该排在第一级文件之后?
  • 好吧,选择SELF_FIRST作为选项,我认为第一级文件应该首先出现,然后是目录及其子目录。如您所知,我在子目录之前和之后得到了一些第一级文件。
  • 来自这个答案stackoverflow.com/a/12236744/2706988::SELF_FIRST 列出目录,然后列出其中的文件。
  • 不管怎样,正如你所知道的,这个顺序没有被遵循。文件和目录都是混杂的。
  • 编辑您的问题并向我们展示您的预期结果。

标签: php


【解决方案1】:

虽然很久以前你问过这个问题,但这里有一个解决方案。另外,我正在寻找相同问题的答案。

<?php

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

    $html = "";

    foreach($iterator as $folder)
    {
      if($folder->isDir())
      {
        $all_files = glob($folder->getRealpath()."/*.*");

        foreach ($all_files as $filename)
        {

          $html .= $filename."<br>";
        }
      }
    }
      echo $html;
    ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多