2014-04-01 2 views
0

Im пытается пересечь дерево файлов в первом порядке, поэтому я ожидаю, что файлы в каталоге будут перечислены первыми, прежде чем перейти на следующий уровень. Однако по какой-то причине этого не происходит. Здесь Вы можете найти свой кодPHP RecursiveDirectoryIterator Self_first is not working

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

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

И это печатает следующий пример (если мой входной каталог/данные/документы/

  • // документы/имя файла данных 1.pdf
  • /данные/документы/имя файла 2.pdf
  • /данные/документы/реж A/файл 4.jpg
  • /данные/документы/реж
  • // документы/имя файла данных 5.pdf
  • /data/documents/dirB/filex.pdf
  • /data/documents/dirB/filey.jpg
  • /data/documents/dirB/dirC/filew.pdf
  • /данные/документы/DIRB /dirC/filev.pdf
  • /данные/документы/DIRB/DIRC
  • /данные/документы/DIRB
  • // документы/имя файла данных r.pdf

Да, файлы и иногда t у его каталогов есть пробелы в их названии. Я запускаю это в командной строке, используя версию php PHP 5.3.3 (cli) (построено: 11 декабря 2013 года 03:29:57)

Любая помощь будет принята с благодарностью.

UPDATE: Я бы ожидал следующего вывода;

  • /данные/документы/реж
  • /данные/документы/реж A/файл 4.jpg
  • /данные/документы/DIRB
  • /data/documents/dirB/filex.pdf
  • /data/documents/dirB/filey.jpg
  • /данные/документы/DIRB/DIRC
  • /data/documents/dirB/dirC/filew.pdf
  • /данные/документы/DIRB/DIRC /filev.pdf
  • // документы/имя файла данных 1.pdf
  • /данные/документы/имя файла 2.pdf
  • // документы/имя файла данных 5.pdf
  • /данные/документы/имя файла r.pdf
+0

Вы имеете в виду, что поддиректории должны быть указаны после файлов первого уровня? –

+0

Ну, с SELF_FIRST, выбранным как опция, я думаю, что сначала должны быть файлы первого уровня, затем каталоги и их подкаталоги. Как вы можете сказать, у меня есть файлы первого уровня перед подкаталогами и некоторые после. –

+0

Из этого ответа http://stackoverflow.com/a/12236744/2706988. ':: SELF_FIRST', а затем файлы. –

ответ

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; 
    ?>