1

如果我需要递归搜索某些目录以找到 .something 文件怎么办?

到目前为止我有这个代码:

   $dir_iterator = new RecursiveDirectoryIterator('path/');
   $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);

   foreach ($iterator as $filename) {
     if(strpos($filename, ".apk")){
         $page->addToBody(substr($filename, 2)."</br>");
         $filename = substr($filename, 2);  
     }
   }

这适用于返回目录中唯一的 .apk 文件,但是如果找到多个文件,我希望能够找到一个特定文件。

例如,我想说找到所有包含“hello”并以.apk 结尾的文件名。

使用 Glob() 我做到了这一点,效果很好:

glob('./'path'/*{'Hello'}*.apk',GLOB_BRACE);

但是它不是递归的。并取决于指定的正确目录。任何帮助将不胜感激。

4

3 回答 3

2

您可以使用正则表达式代替 strpos(),例如:

[...]
if(preg_match('/.*hello.*\.apk$/', $filename))
[...]

此示例表示“*hello*.apk”。所以一个字符串在它的某个地方有“hello”并以“.apk”结尾。

有关详细信息,请参阅PHP preg_match()

于 2013-01-11T15:31:14.080 回答
1

换行:

if(strpos($filename, ".apk"))

到:

if (preg_match('@hello.*\.apk$@', $filename))

虽然正则表达式更灵活,但您仍然可以使用strposwith substr

if (strpos($filename, 'hello') !== false && substr($filename, -4) === '.apk')
于 2013-01-11T15:33:40.493 回答
0

尝试同时搜索:

if(strpos($filename, ".apk") !== false && strpos($filename, "Hello") !== false){

!== false 是必须的,否则不会返回 Hello.apk

于 2013-01-11T15:29:55.973 回答