我有一个包含大约450个单词的“坏”单词列表。
我正试图用
检查句子<?php
$sentence = "A quick brown fox jumps over the lazy dog";
foreach($words as $word) {
$check = strstr($sentence,$word);
if(!empty($check))
return false;
}
return true;
?>
对此有更快更好的方法吗?
答案 0 :(得分:2)
您可以尝试使用preg_split
和array_intersect
<?php
$sentence = "A quick brown fox jumps over the lazy dog";
$sntce_wrds = preg_split('/\s+/', $sentence);
return count(array_intersect($sntnce_words, $words)) > 0;
答案 1 :(得分:0)
我认为preg_replace也应该符合您的需求。传递$ words数组作为替换模式和空格。然后将结果与原始字符串匹配。例如
$newStr = preg_replace($words, '', $sentence);
if($newStr !== $sentence)
return false;
return true;
请知道这是否有帮助。
编辑:正如仍然指出的那样,$ words数组中的单词需要是有效的正则表达式。因此,只有将单词更改为“/”/“/”。
之类的模式时,此方法才有效编辑-2:如果由于某种原因想要保留单词数组,请使用
$wordArr = preg_replace("/(.*)/", '/\1', $words);
将所有单词转换为有效的正则表达式。我认为即使有这个开销,它也应该比很长的列表中的strstr更快。