2014-05-13 44 views
0

有沒有辦法從一個不同的文件開始,例如。一個以「M」,而不是在一個目錄下的第一個文件,下面的代碼?:遍歷一個目錄,但從不同的文件開始?

$filename = "/Users/jMac-NEW/Desktop"; 
$it = new RecursiveDirectoryIterator($filename, RecursiveDirectoryIterator::SKIP_DOTS); 
foreach (new RecursiveIteratorIterator($it) as $file) { ... 
+1

你是什麼意思開始的?意思是某些文件比其他文件具有更高的優先級,並且A-L應該在稍後處理,或者您的意思是跳到? –

+0

無論你想實現什麼:不,沒有原生功能,但你可以實現自己的過濾器迭代文件時。還有一個有趣的組件:symfony/finder。 – matthias

+0

@Steve Buzonas:我想跳過它們。我的腳本需要很長時間才能執行,所以至少我可以「暫停」腳本,然後再次從我上次留下的文件中執行腳本。歡迎任何其他建議 – humanitiesclinic

回答

0

迭代直通它的時候(包括子目錄)開始你的RecursiveDirectoryIterator是一個遞歸迭代器,所以你需要將其包裝在RecursiveIteratorIterator中以遍歷子目錄。

然後,您可以使用RegexIterator創建一個模式來過濾掉那些不想從頭開始的文件。

$filename = __DIR__; 
$it = new RegexIterator(
    new RecursiveIteratorIterator(
     new RecursiveDirectoryIterator($filename, RecursiveDirectoryIterator::SKIP_DOTS) 
    ), 
    sprintf('|^%s[^A-La-l].*$|', preg_quote($filename . DIRECTORY_SEPARATOR, '|') 
); 

var_dump(iterator_to_array($it));