我正在为我的网页制作一个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 回答
我怀疑你可能一直在滥用strpos();要么以错误的顺序放置参数,要么不检查真正的布尔结果 . 这应该工作:
编辑以添加结果:
@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; }