【问题标题】:Directory searching in PHP with multiple criteria使用多个条件在 PHP 中搜索目录
【发布时间】:2013-01-09 17:35:42
【问题描述】:

我一直在尝试找到一种方法来在 PHP 中搜索具有多个条件的目录,但运气不佳。

我有一个文件夹,其中包含同一文件的多个版本,但使用不同的语言和不同的设备:

例如

 1. file_en_v980.jar

 2. file_fr_v980.jar

 3. file_en_v990.jar

 4. file_fr_v990.jar

我希望能够在目录中搜索 v980 的所有英文 (en) .jar 文件。

我试过这个:

foreach(glob('./'.$installer_location.'/'.$brand_name.'/*en*.jar') as $filename){
    echo $filename."</br>";
}  

它可以工作,但也会返回法语 (fr) 文件。

我试过这个:

foreach(glob('./'.$installer_location.'/'.$brand_name.'/*en,v980*.jar') as $filename){
    echo $filename."</br>";
} 

但它什么也没返回,所以我假设我的语法错误。

任何帮助将不胜感激。

加法:

根据下面评论的建议,我尝试了这个:

foreach(glob('./'.$installer_location.'/'.$brand_name.'/*{en,v980}*.jar',GLOB_BRACE) as $filename){
    echo $filename."</br>";
} 

这将返回所有包含 en、v980 或两者的文件。我只需要弄清楚是否有办法说必须同时包含两者。

【问题讨论】:

  • 为什么是en,v980 而不是en_v980
  • 我认为 ',' 会分隔 'en_v980' 搜索匹配字符串的条件。实际文件名比我在示例中使用的要大得多。

标签: php search directory glob


【解决方案1】:

PHP 的 glob() 本质上使用与 unix shell 相同的通配符/匹配引擎。使用您的版本,您正在搜索包含 en,v980 的文件,并且它不会被视为“替代”。 http://www.tldp.org/LDP/GNU-Linux-Tools-Summary/html/x11655.htm

试试

glob('..../*{en,v980}*.jar')

改为(注意{}

【讨论】:

  • 感谢您的建议 - 我试过了,但它不起作用。在发布问题之前我做了一些非常相似的事情,因为它是在 GLOB 的文档中编写的,它在右括号之前使用了 GLOB_BRACE。奇怪的是它不起作用,因为文档示例实际上是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 2011-04-23
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 2023-04-07
  • 2013-09-13
相关资源
最近更新 更多