2009-11-10 42 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