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 回答