2009-11-10 45 views
0

我試圖根據特定參數確定文件。首先,我遞歸通過目錄結構進行迭代,如下所示:PHP根據正則表達式中的參數確定文件

  • C:/用戶/編程器/下載/評論/ XBOX
  • C:/用戶/編程器/下載/評論/ PS3
  • C:/ Users/programmer/Downloads/reviews/GBA

請注意控制檯遊戲類型在字符串的末尾。在此之後,我們有以下幾點:

  • C:/Users/programmer/Downloads/reviews/XBOX/p123.html
  • C:/Users/programmer/Downloads/reviews/XBOX/r123.html

如果您在第二部分注意到,有一個文件具有ap,另一個具有r。

我的最終目標是確定哪些文件是P *,哪些是R *,所以我的正則表達式我想是以下(僞代碼)的東西

/console/p*/

/console/r*/

總之,我需要通過的文件,而無需關心控制檯類型進行迭代,知道我的功能,文件名和文件類型(p或R)的結束。感謝您的幫助

回答

0

preg_match('~/([pr])[^/]+$~', $file, $m); 
if($m[1] == 'p') something 
if($m[1] == 'r') something else 

//編輯:雖然這直接回答你的問題,這是不是最有效的方法。根據你想要的,你最好使用glob(),正如其他人所建議的那樣,或者使用glob()+ preg_grep(),甚至更好的方法是使用數據庫而不是文件。你能告訴我們更多關於什麼是想要實現的嗎?

0

假設你只是想獲得的文件列表,通過它們的文件名的第一個字母來區分:

走在目錄樹,獲取文件名,例如$文件名可變。

$ files [$ filename [0]] [] = $ filename;

0
glob('C:/Users/programmer/Downloads/reviews/*/p*.html'); 
glob('C:/Users/programmer/Downloads/reviews/*/r*.html'); 
+0

+1爲簡單起見 – 2009-11-10 17:00:45

+0

水珠是一個很好的建議,但它不會以適合什麼,我試圖完成 – jkushner 2009-11-10 19:11:38

2

PHP glob函數將遍歷與滿足給定條件的所有文件匹配的目錄。

$files = array(); 

foreach(glob("C:/Users/programmer/Downloads/reviews/*/p*.html") as $filename) { 
    $files['p'][] = $filename; 
} 

foreach(glob("C:/Users/programmer/Downloads/reviews/*/r*.html") as $filename) { 
    $files['r'][] = $filename; 
} 

這會給你一個數組看起來像這樣:

array (
    p => array (
     0 => p123.htm 
     1 => p456.htm 
    ) 

    r => array (
     0 => r123.htm 
     1 => r456.htm 
    ) 
) 
+0

方案沒有必要遍歷結果,是嗎?這不會工作嗎?:$ files ['p'] = glob(「C:/ Users/programmer/Downloads/reviews/*/p * .html」); ...實際上,glob有時會返回false,這會導致您的foreach循環出錯。 – 2009-11-10 17:03:08