どのように私はSPLを使用して完全なディレクトリツリーを取得することができますか?
質問
私はおそらくSPL
とRecursiveDirectoryIterator
を使用して、RecursiveIteratorIterator
を使用して完全なディレクトリツリーを取得できますか?
解決
デフォルトでは、RecursiveIteratorIterator
は LEAVES_ONLY
するに2つ目の引数に__construct
を使用します。 。これは、ファイルだけを返すことを意味します。あなたはファイルおよびのディレクトリを含めたい場合は(少なくとも、それは私が検討したいものです。のフルのディレクトリツリーが)、あなたがしなければならないと思います:
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path),
RecursiveIteratorIterator::SELF_FIRST
);
、その後、あなたはそれの上にforeach
することができます。あなたの代わりにそれを出力するディレクトリツリーを返したい場合は、例えば、配列に格納することができます。
foreach ($iterator as $fileObject) {
$files[] = $fileObject;
// or if you only want the filenames
$files[] = $fileObject->getPathname();
}
また、実行して$fileObjects
なしforeach
の配列を作成することができます:
$files[] = iterator_to_array($iterator);
あなただけのディレクトリは、このようなforeach
オーバー$iterator
を返さたい場合:
foreach ($iterator as $fileObject) {
if ($fileObject->isDir()) {
$files[] = $fileObject;
}
}
他のヒント
あなただけのことも、あなたが望むすべてを行う
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file)
{
/* @var $file SplFileInfo */
//...
}
所属していません StackOverflow