26

これはチャットページ用です。私は持ってい$string = "This dude is a mothertrucker"ます。私は悪い言葉の配列を持っています: $bads = array('truck', 'shot', etc). $stringに単語が含まれているかどうかを確認するにはどうすればよい$badですか?
これまでのところ、私は持っています:

        foreach ($bads as $bad) {
        if (strpos($string,$bad) !== false) {
            //say NO!
        }
        else {
            // YES!            }
        }

私がこれを行う場合を除いて、ユーザーが$badsリスト内の単語を入力すると、出力は NO! 続いてイエス!そのため、何らかの理由でコードが 2 回実行されています。

4

11 に答える 11

72
function contains($str, array $arr)
{
    foreach($arr as $a) {
        if (stripos($str,$a) !== false) return true;
    }
    return false;
}
于 2012-12-10T06:06:22.193 に答える
13

1) 最も簡単な方法:

if ( in_array( 'three',  ['one', 'three', 'seven'] ))
...

2)別の方法(別の配列に向かって配列をチェックしながら):

$keywords=array('one','two','three');
$targets=array('eleven','six','two');
foreach ( $targets as $string ) 
{
  foreach ( $keywords as $keyword ) 
  {
    if ( strpos( $string, $keyword ) !== FALSE )
     { echo "The word appeared !!" }
  }
}
于 2013-05-30T12:46:00.673 に答える
8

コードの代わりにこれを試してください

$string = "This dude is a mothertrucker";
$bads = array('truck', 'shot');
foreach($bads as $bad) {
    $place = strpos($string, $bad);
    if (!empty($place)) {
        echo 'Bad word';
        exit;
    } else {
        echo "Good";
    }
}
于 2012-12-10T07:11:34.953 に答える
3

このような悪い言葉を見つけたら、置いて終了するか、死ぬ

foreach ($bads as $bad) {
 if (strpos($string,$bad) !== false) {
        //say NO!
 }
 else {
        echo YES;
        die(); or exit;            
  }
}
于 2012-12-10T06:07:14.580 に答える
1

これが欲しかった?

$string = "This dude is a mothertrucker"; 
$bads = array('truck', 'shot', 'mothertrucker');

    foreach ($bads as $bad) {
        if (strstr($string,$bad) !== false) {
            echo 'NO<br>';
        }
        else {
            echo 'YES<br>';
        }
    }
于 2012-12-10T06:11:55.253 に答える
0

チャット文字列がそれほど長くない場合は、そのようにします。

$badwords = array('mothertrucker', 'ash', 'whole');
$chatstr = 'This dude is a mothertrucker';
$chatstrArr = explode(' ',$chatstr);
$badwordfound = false;
foreach ($chatstrArr as $k => $v) {
    if (in_array($v,$badwords)) {$badwordfound = true; break;}
    foreach($badwords as $kb => $vb) {
        if (strstr($v, $kb)) $badwordfound = true;
        break;
    }
}
if ($badwordfound) { echo 'You\'re nasty!';}
else echo 'GoodGuy!';
于 2012-12-10T06:08:06.543 に答える
-2
 $string = "This dude is a good man";   
 $bad = array('truck','shot','etc'); 
 $flag='0';         
 foreach($bad as $word){        
    if(in_array($word,$string))        
    {       
        $flag=1;       
    }       
}       
if($flag==1)
  echo "Exist";
else
  echo "Not Exist";
于 2015-02-11T09:15:28.600 に答える