按字符串过滤数组

时间:2017-03-29 19:02:56

标签: php arrays

我的情况是我有一个路径名数组,例如

[0]: /var/www/mysite/fred.md
[1]: /var/www/mysite/george.md
[2]: /var/www/mysite/arthur.md
[3]: /var/www/mysite/.htaccess

我有另一个字符串数组

[0]: fred
[1]: art

我想过滤路径名数组,以便最终得到一个项目数组,其中路径名的任何部分与字符串匹配 - 所以我应该得到

[0]: /var/www/mysite/fred.md
[1]: /var/www/mysite/arthur.md

在PHP中执行此操作的最有效方法是什么?

2 个答案:

答案 0 :(得分:0)

可能不比循环更有效但是替代。正如评论中指出的那样,一个好处是你可以将字符串用作正则表达式:

$result = preg_grep('/'.implode('|', $strings).'/i', $pathnames);

要避免将字符串中的字符解释为正则表达式,请将其转义:

$pattern = implode("|", array_map(function($v){ return preg_quote($v, "/"); }, $strings));
$result  = preg_grep("/$pattern/i", $pathnames);

答案 1 :(得分:0)

效率最高?

array_filter +您对KMP algorithm的实施。

但是,只有当您需要大量过滤数据时,如果您需要快速解决方案(但不能稳定快速地处理大量数据),请使用

array_filterstrpossubstr组合,如果速度不是您的首选,那么它将非常适合您。