如果我需要递归搜索某些目录以便找到.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文件,但是如果找到多个文件,我希望能够找到一个特定的文件。
e.g。我想说找到包含“hello”的所有文件名并以.apk结尾。
使用Glob(),我做到了这一点,效果很好:
glob('./'path'/*{'Hello'}*.apk',GLOB_BRACE);
然而它不是递归的。并取决于指定的正确目录。 任何帮助将非常感谢。
答案 0 :(得分:2)
您可以使用正则表达式代替strpos():
[...]
if(preg_match('/.*hello.*\.apk$/', $filename))
[...]
此示例代表“* hello * .apk”。所以一个字符串在其中某处有“hello”并以“.apk”结尾。
有关详细信息,请参阅PHP preg_match()。
答案 1 :(得分:1)
更改行:
if(strpos($filename, ".apk"))
要:
if (preg_match('@hello.*\.apk$@', $filename))
虽然正则表达式更灵活,但您仍然可以使用strpos
和substr
:
if (strpos($filename, 'hello') !== false && substr($filename, -4) === '.apk')
答案 2 :(得分:0)
尝试搜索两者:
if(strpos($filename, ".apk") !== false && strpos($filename, "Hello") !== false){
!== false是必要的,否则将不会返回Hello.apk