如何加快这个PHP功能?

时间:2015-12-07 20:13:46

标签: php string function loops contains

我正在为我的网页制作一个php过滤器,它通过一个数组检查,通过一个文件读入,看看几个用户输入字段(名称,描述等)是否包含数组中的任何单词。我尝试使用内置于php中的“strpos”函数,但无论出于何种原因,它只检测到单词,如果单词是字符串中的最后一个东西,即如果我检查单词“cat”它会检测到它,如果它是检查“这是一只猫”和“粪便”,但不是检查“猫”或“猫玩具”,甚至只是“猫”,后面有空格。为了清楚起见,我确实检查了strpos函数是否不等于false(strpos(...)!== false)。所以我创建了自己的函数,将字符串分解为每个可能的子字符串,并检查每个字符串以查看它是否等于数组中的任何单词。有没有更快的方法可以做到这一点,或者我可以加快执行此代码的方式?这是代码:

function arrayContains($string, array $array){
$string = strtolower($string);
$len=strlen($string);
 foreach($array as $check){
    for($i=0; $i<$len; $i++){
        for($j=1; $j<=$len-$i; $j++){
            $sub=substr($string,$i,$j);
            if($sub==$check)
                return true;
        }
}
}
return false;
 }

2 个答案:

答案 0 :(得分:1)

我怀疑你可能误导了strpos();要么以错误的顺序放置参数,要么不检查真正的布尔结果。这应该有效:

function foundInArray($string, $array){
    $string = strtolower($string);
    foreach($array as $check){
        if (strpos($string, strtolower($check)) !== false) {
            return true;
        }
    }
    return false;
}

编辑以添加结果:

php > $array = ["foo", "bar", "baz"];
php > $string = "Cheese is a food I like";
php > var_dump(foundInArray($string, $array));
bool(true)
php > $string = "Cheese is a thing I like";
php > var_dump(foundInArray($string, $array));
bool(false)

答案 1 :(得分:0)

@developerwjk建议的这个答案有助于解决我的问题。如果有任何建议,我仍然愿意接受更多建议。     function arrayContains($string, array $array){ $string = strtolower($string); $len=strlen($string); for($i=0; $i<$len; $i++){ for($j=1; $j<=$len-$i; $j++){ $sub=substr($string,$i,$j); if(in_array($sub, $array)) return true; } } return false; }