2017-04-02 3 views
0

foreachを使用して、指定された文字列に配列の単語が含まれているかどうかを判断する関数を作成しようとしています。私はforeachの後にecho "iteration...<br>";を入れてデバッグしようとしました。何回ループするのか見ることができます。繰り返しループしているようには見えないので、設定した方法に問題があると思われます。foreach多分私の配列。何か案は?ありがとう。このforeachの何が問題なのですか?

$badwords = array("example", "word"); 

function containsBad($st) { 
    $isbad = false; 
    foreach($badwords as $word) { 
     echo "iteration...<br>"; 
     if (strpos($st, $word)) { 
      $isbad = true; 
     } 
    } 
    return $isbad ? 'true' : 'false'; 
} 

echo containsBad("example"); 
+2

'$ badwords'はグローバルです。関数に 'global $ badwords;'を追加する必要があります。 –

+1

'strpos()'は0(キーワードが見つかった場合)またはfalse(見つからない場合)を返すことができます。[PHP Docs](http://uk1.php.net/manual/)に大きな警告があります。 en/function.strpos.php)を使用して関数を正しく使用する方法を説明します –

答えて

1

あなたがそれを使用する前に、関数の内部でグローバルとして$badwords変数を定義する必要があります。

global $badwords; 

をしかし、あなたのプログラム内の別の改良点があります:

  1. プログラムが判断することはできませんがあなたの文字列の始めに悪い言葉が始まったら。ブール変数$isbad

$ BADWORDS =配列( "例えば"、 "言葉")の使用

  • function containsBad($st) 
        { 
        global $badwords; 
        $isbad = false; 
        foreach($badwords as $word) 
        { 
        echo "iteration...<br>"; 
        if (strpos($st, $word)!==false) 
         $isbad = true; 
        } 
        return $isbad; 
        } 
    
  • +0

    ありがとうございます。あなたはそれをする必要がある奇妙。 – Bacon

    +0

    基本的に、ユーザー名に悪い単語が含まれているかどうかを判断する以外には、実際にはそれほど多くのことを行う必要はありません。 '$ isbad'は、デバッグのためのものです。これは私の新しいコードであり、まだ最終的ではなく、デバッグのためだけです: 'function containsBad($ st){ \t \t $ badwords = file(" badwords.txt "、FILE_IGNORE_NEW_LINES); \t \t foreachの($ワードとして$ BADWORDS){ \t \t \t(strpos($ ST、$ワード)===真|| strpos($ ST、$ワード)> -1){ \t \t \t \t場合trueを返します。 \t \t \t} \t \t} \t \tリターン "偽"。 \t} \t \t echo containsBad( "test"); ' – Bacon

    関連する問題