PHP рекурсивдиректоритератор

Я хочу сделать RecursiveDirectoryIterator для набора папок в каталоге, скажем, ./temp, а затем перечислить файлы в каждой папке в соответствии с именем папки.

Например у меня есть папки A и B.

В A у меня есть список файлов, скажем, 1.txt, 2.php, 2.pdf, 3.doc, 3.pdf.

В B у меня есть 1.pdf, 1.jpg, 2.png.

Я хочу, чтобы мои результаты были такими:

A => List of files in A
B => List of files in B

Как это может быть сделано?

<?php 
$scan_it = new RecursiveDirectoryIterator("./temp"); 
foreach(new RecursiveIteratorIterator($scan_it) as $file =>$key) { 
    $filetypes = array("pdf"); 
    $filetype = pathinfo($file, PATHINFO_EXTENSION); 
    if (in_array(strtolower($filetype), $filetypes)) { 
        $dlist=basename($file); //sort 
?> 
<ul>
    <li>
        <?php echo substr(dirname($file),11);?>
    </li> 
    <li>
        <a href="<?php echo $file;?>"><?php echo basename($file);?></a>
    </li>
</ul> 
<?php 
    }} 
?>

person Ameque    schedule 18.11.2013    source источник


Ответы (2)


Используйте комбинацию RecursiveDirectoryIterator и RecursiveIteratorIterator для перебора всех подкаталогов.

Фрагмент ниже сделает то, что вам нужно, хотя он ограничен только созданием массива в один массив... это сделано для того, чтобы избежать рекурсивного беспорядка в небольшом фрагменте, уже сбивающем с толку процедурные мозги.

$array = array();

foreach ($iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator("./temp", 
        RecursiveDirectoryIterator::SKIP_DOTS),
    RecursiveIteratorIterator::SELF_FIRST) as $item) {
    // Note SELF_FIRST, so array keys are in place before values are pushed.

        $subPath = $iterator->getSubPathName();
            if($item->isDir()) {
                // Create a new array key of the current directory name.
                $array[$subPath] = array();
            }
            else {
                // Add a new element to the array of the current file name.
                $array[$subPath][] = $subPath;
            }
    }
}
person Greg    schedule 28.11.2013

Я думаю, вам нужна функция scandir. Ссылка показывает вам документацию по этой функции.

person sHentschel    schedule 18.11.2013
comment
ОП уже знает об этой функции, и этот вопрос был помечен как таковой. - person Amal Murali; 18.11.2013
comment
Пытался быть кратким, но мне нужно указать, что в каждой из папок есть другие подпапки. это было моей причиной использования функции RecursiveDirectoryIterator - person Ameque; 18.11.2013