PHP中带目录的递归迭代器

PHP中带目录的递归迭代器,php,recursion,recursiveiterator,Php,Recursion,Recursiveiterator,我想列出目录中的目录和文件,如: Array( [0] => 2014 [1] => images [2] => videos ) 此数组中的所有目录都位于我的网站的“web_public”目录中。但是里面还有一些我不想读的目录。完整的web_public是: 2014 images videos css js ... and so on 以下是我正在做但不起作用的事情: $objects = array(); foreach($dirs_to_re

我想列出目录中的目录和文件,如:

Array(
    [0] => 2014
    [1] => images
    [2] => videos
)
此数组中的所有目录都位于我的网站的“web_public”目录中。但是里面还有一些我不想读的目录。完整的web_public是:

2014
images
videos
css
js
... and so on
以下是我正在做但不起作用的事情:

$objects = array();
foreach($dirs_to_read as $dir) {
    $dir = 'web_public/'.$dir;
    $objects = array_merge($objects, new RecursiveDirectoryIterator($dir));                
}   
$objects = new RecursiveIteratorIterator($objects);
从PHP5中,您可以使用它来获取文件数组。例如:

$path = __DIR__;

$directory = new \RecursiveDirectoryIterator(
    $path,
    RecursiveDirectoryIterator::SKIP_DOTS
    | RecursiveDirectoryIterator::CURRENT_AS_PATHNAME
    | RecursiveDirectoryIterator::KEY_AS_FILENAME
);

$iterator = new \RecursiveIteratorIterator($directory);
$array    = iterator_to_array($iterator);

print_r($array);
输出类似于:

Array
(
    [demo.php] => /path/tp/demo.php
)
这就需要使用。用法示例:

$ai = new AppendIterator;
foreach( $dirs_to_read as $dir )
{
    // append RecursiveDirectoryIterator (wrapped in RecursiveIteratorIterator)
    // you need RecursiveIteratorIterator as well,
    // to iterate all depths of the RecursiveDirectoryIterator, in one go
    $ai->append( new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator( 'web_public/' . $dir ),
        RecursiveIteratorIterator::SELF_FIRST
    ) );
}

// iterate the AppendIterator
foreach( $ai as $file )
{
    /* do something with the file (which is an SplFileInfo instance) */
}

new RecursiveDirectoryIterator($dir)
返回一个对象(不是数组),因此不能将其用作
array\u merge
第二个参数。阅读更多:是的,我在一个print_r中看到了这一点,但我没有找到修复它的方法。如果你想要这种级别的控制,你不能使用RecursiveDirectoryIterator()-我编写了自己的类(pfpFileTree-可在上获得)。当数据保存在公共变量中(您可以使用数组函数)时,该类被明确设计为允许筛选、添加和编辑列表。感谢您的帮助!