我有一个数组中的单词列表。检查字符串中是否存在这些单词的最快方法是什么?
目前,我正在foreach
通过stripos
循环逐个检查数组元素是否存在。我很好奇是否有更快的方法,就像我们使用数组str_replace
所做的那样。
答案 0 :(得分:2)
关于your additional comment,您可以使用explode()或preg_split()将字符串分解为单个单词,然后使用array_intersect()针对针阵列检查此数组。因此,所有工作只进行一次。
<?php
$haystack = "Hello Houston, we have a problem";
$haystacks = preg_split("/\b/", $haystack);
$needles = array("Chicago", "New York", "Houston");
$intersect = array_intersect($haystacks, $needles);
$count = count($intersect);
var_dump($count, $intersect);
我可以想象array_intersect()非常快。但这取决于你真正想要的东西(匹配单词,匹配片段,......)
答案 1 :(得分:1)
我的个人职能:
function wordsFound($haystack,$needles) {
return preg_match('/\b('.implode('|',$needles).')\b/i',$haystack);
}
//> Usage:
if (wordsFound('string string string',array('words')))
请注意,如果您使用UTF-8外来字符串,则需要使用utf-8 preg word boundary更改\ b
注意2:确保只在$ needle中输入a-z0-9字符(感谢MonkeyMonkey),否则你需要preg_quote
之前
注意3:由于i
修饰符
答案 2 :(得分:0)
通常,正则表达式与基本字符串函数(如str_ipos()
)相比较慢。但我认为这取决于具体情况。如果你真的需要最高性能,我建议用实际数据进行一些测试。