简体   繁体   English

带有PHP目录的RecursiveIterator

[英]RecursiveIterator with directories in PHP

I want to list directories and files in directories like: 我想列出目录中的目录和文件,如:

Array(
    [0] => 2014
    [1] => images
    [2] => videos
)

All of the directories in this array are in the "web_public" directory of my website. 此数组中的所有目录都位于我的网站的“web_public”目录中。 But there are some other directories within it which I don't want to read. 但是其中还有一些我不想阅读的目录。 The complete web_public is: 完整的web_public是:

2014
images
videos
css
js
... and so on

Here is what I'm doing but doesn't work: 这是我正在做的但不起作用:

$objects = array();
foreach($dirs_to_read as $dir) {
    $dir = 'web_public/'.$dir;
    $objects = array_merge($objects, new RecursiveDirectoryIterator($dir));                
}   
$objects = new RecursiveIteratorIterator($objects);

From PHP 5 you can use RecursiveDirectoryIterator to get file array. 从PHP 5开始,您可以使用RecursiveDirectoryIterator来获取文件数组。 For example: 例如:

$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);

Outputs something like: 输出类似于:

Array
(
    [demo.php] => /path/tp/demo.php
)

This calls for use of the AppendIterator . 这需要使用AppendIterator Example usage: 用法示例:

$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) */
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM