我的情况是我有一个路径名数组,例如
[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中执行此操作的最有效方法是什么?
答案 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_filter
,strpos
和substr
组合,如果速度不是您的首选,那么它将非常适合您。