【发布时间】:2012-10-20 12:00:04
【问题描述】:
有如下sn-p递归映射当前目录的内容:
$files = new RecursiveIteratorIterator
(
new RecursiveDirectoryIterator('./',
FilesystemIterator::SKIP_DOTS | FilesystemIterator::UNIX_PATHS),
RecursiveIteratorIterator::SELF_FIRST
);
$files = array_values(array_map('strval', iterator_to_array($files)));
返回如下内容:
Array
(
[0] => ./1.png
[1] => ./a.php
[2] => ./adminer
[3] => ./adminer/adminer.css
[4] => ./adminer/adminer.php
)
有什么方法可以让RecursiveDirectoryIterator / FilesystemIterator 模拟glob() 函数中存在的GLOB_MARK 行为?来自手册:
GLOB_MARK - 在每个返回的目录中添加一个斜杠。
我知道我可以通过这样做来效仿:
foreach ($files as $key => $value)
{
$files[$key] .= (is_dir($value) ? '/' : '');
}
但这需要(不必要地?)多次访问磁盘。我正在寻找一种方法来快速确定路径是目录还是常规文件,而结尾的斜杠似乎是理想的解决方案。
我计划用这个遍历成千上万(如果不是数百)数千个文件,因此性能至关重要。
额外问题:有没有办法只获取目录(递归)?
【问题讨论】:
-
您介意扩展
RecursiveDirectoryIterator的解决方案吗?? -
@Baba: 一点也不,但请注意,在里面打电话给
isDir()是作弊! :P -
我知道....我也想作弊... :)
标签: php filesystems iterator spl