php脚本应该列出所有可用的“模块”。模块是一个至少包含info.php
文件的子目录。
现在我需要一个包含“info.php”文件的所有子目录的列表(即所有模块的列表)并提供此代码:
$modules = array();
if ( $handle = opendir( MODULE_DIR ) ) {
while ( false !== ( $entry = readdir( $handle ) ) ) {
if ( $entry === '.' || $entry === '..' ) { continue; }
$info_file = MODULE_DIR . $entry . '/info.php';
if ( ! is_file( $info_file ) ) { continue; }
$modules[] = $entry;
}
closedir( $handle );
}
问题:是否有更短/更好的方式来获取列表,最好没有循环?
答案 0 :(得分:1)
看一下RecursiveDirectoryIterator
http://php.net/manual/en/class.recursivedirectoryiterator.php
在您的情况下,代码看起来像这样:
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('.'));
foreach($it as $key => $item) {
if(basename($key) === 'info.php') {
echo dirname($key) . PHP_EOL;
}
}
答案 1 :(得分:1)
使用函数glob()
:
foreach(glob('src/*/info.php') as $path) {
echo basename(dirname($path)) . PHP_EOL;
}