2012-06-05 18 views
1

我正在使用這個腳本,但我想指定遞歸函數的最大深度。我不知道如何使用它,我總是得到一個錯誤。我應該如何在這裏使用::setMaxDepth如何爲RecursiveIteratorIterator使用:: 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; 
} 

回答

7

你需要調用setMaxDepth()RecursiveIteratorIterator一個實例。當您在foreach聲明中構造RecursiveIteratorIterator時,這很難。相反,使用一個變量來保存它。

$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); 
} 
+0

非常感謝您的幫助,我會檢查所有這些;) – Neoweiter

相關問題