1

このスクリプトを使用していますが、再帰関数に最大深度を指定したいと思います。使い方がわからないので、いつもエラーが出ます。ここで::setMaxDepthをどのように使用する必要がありますか?

public function countFiles($path)
{ 
global $file_count;
$depth=0;
$ite=new RecursiveDirectoryIterator($path);

$file_count=0;
foreach (new RecursiveIteratorIterator($ite) as $filename=>$cur) :
    $file_count++;
    $files[] = $filename;
endforeach;

return $file_count;
}
4

1 に答える 1

7

setMaxDepth()のインスタンスを呼び出す必要がありますRecursiveIteratorIterator。ステートメントRecursiveIteratorIterator内を作成する場合、これは困難です。foreach代わりに、変数を使用して保持します。

$files = new RecursiveIteratorIterator($ite);
$files->setMaxDepth($depth);
foreach ($files as $filename => $cur) {
    $file_count++;
    $files_list[] = $filename;
}

ただし、ここではループを使用する必要がないことに注意してください(上記の例で削除した他のことをコードが実行しない限り)。を使用してファイルの数を取得できますiterator_count()

function countFiles($path)
{
    $depth = 1;
    $ite   = new RecursiveDirectoryIterator($path, RecursiveDirectoryIterator::SKIP_DOTS);
    $files = new RecursiveIteratorIterator($ite);
    $files->setMaxDepth($depth);
    return iterator_count($files);
}
于 2012-06-07T06:48:07.150 に答える