首页 文章

我怎样才能加快这个PHP功能?

提问于
浏览
0

我正在为我的网页制作一个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 回答

  • 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)
    
  • 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; }

相关问题