如何检查word是否在数组中,然后返回匹配的单词


How to check if word is in array then return the matched word

问题1

我使用下面的代码来检查某些输入元素中的坏单词,并且我想告诉用户文本中的哪个单词是不允许的。我如何从匹配它的数组中获得特定的单词或单词?当用户输入多个坏单词时,它只检测第一个单词而忽略其余的。

问题2

我如何忽略小写和大写,这段代码不认为"John""John"是同一件事。我不知道这是否符合规则。如果这是弱,请推荐另一种方式。PHP

$BadWords = array("James", "June", "Jane");
if (in_array($comment, $BadWords)){
    echo 'No way... that is not allowed lol...';
}

问题3 (Speed)

假设我有大约2000个单词来比较一个单词,哪种方式最好在不滥用资源的情况下更快地完成这个过程,同时考虑到过滤坏单词只是一个例子,因为这不仅限于检查坏单词,而且在任何情况下都不考虑数据库。

谢谢。

结合上面的两个答案,这将检测是否有多个坏词,以及它是否与任何其他字符串连接:

$comment="James junexyz";
$BadWords = array("James", "June", "Jane");
foreach($BadWords as $k=>$v){
    $pos = stripos($comment,$v);
    if($pos!==false){
        echo $v. ' is not allowed'.'<br>';
    }
}

使用 array_search 从键

中获取匹配的单词
 <?php
$comment="James";
$BadWords = array("James", "June", "Jane");
$bwords = array_map('strtoupper',$BadWords);
if (in_array(strtoupper($comment), $bwords)){
    $k=array_search($comment,$bwords);
    echo $BadWords[$k]."'n";
    echo 'No way... that is not allowed lol...';
}

您可以使用下面的代码段,它将工作小写和大写

$comment="James"; // 'james'
$BadWords = array("James", "June", "Jane");
$lowerCap = array_map('strtolower', $BadWords);
  if (in_array(strtolower($comment), $lowerCap)){
    $k=array_search($comment,$lowerCap );
    echo $BadWords[$k]."'n";
    echo 'No way... that is not allowed lol...';
}