如何检查字符串中是否存在数组元素

时间:2012-05-21 22:32:23

标签: php arrays string

我有一个数组中的单词列表。检查字符串中是否存在这些单词的最快方法是什么?

目前,我正在foreach通过stripos循环逐个检查数组元素是否存在。我很好奇是否有更快的方法,就像我们使用数组str_replace所做的那样。

3 个答案:

答案 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())相比较慢。但我认为这取决于具体情况。如果你真的需要最高性能,我建议用实际数据进行一些测试。