PHP RecursiveDirectoryIterator

Я хочу сделать 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 }} ?> 

Solutions Collecting From Web of "PHP RecursiveDirectoryIterator"

Используйте комбинацию 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; } } } 
 //Managed to put this together and it somehow works for me. If you have other options please provide. Thanks $path='./temp'; $dir = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS); $files = new RecursiveIteratorIterator($dir, RecursiveIteratorIterator::CHILD_FIRST); foreach ($files as $file=>$mykey) { if(is_dir($file)) { $directory = $file; $mydir = new RecursiveIteratorIterator(new RecursiveRegexIterator(new RecursiveDirectoryIterator($directory,RecursiveDirectoryIterator::FOLLOW_SYMLINKS), // match both pdf file extensions and directories '#(?<!/)\.pdf$|^[^\.]*$#i'),true); foreach ($mydir as $myfile=>$mykey) { $result[] = $myfile.'<br />'; $filetypes = array("pdf"); $filetype = pathinfo($myfile, PATHINFO_EXTENSION); if (in_array(strtolower($filetype), $filetypes)) { // output all matches substr(dirname($file),11) ?> <div><h3<?php echo count($result);?>> <span><?php echo substr(PHP_EOL . $directory . PHP_EOL . PHP_EOL,13);?></span></h3></div> <?php if (!empty($mydir)) { foreach ($mydir as $d) { if (strpos($d->getFilename(), '.pdf') !== FALSE) {?> <div><ul><li><a href="<?php echo $d;?>"><?php echo basename($d->getPath() . DIRECTORY_SEPARATOR . $d->getFilename() . PHP_EOL);?></a></li></ul></div> <?php } } } } } } } 

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