2017-04-02 135 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文档]中有很大的警告(http://uk1.php.net/manual/) en/function.strpos.php)解释如何正确使用该功能 –

回答

1

您使用它之前,必须定义$badwords变量作为全局函数内部:

global $badwords; 

但在你的程序中的其它改进:

  1. 你的程序无法确定如果坏字从字符串的开始处开始。
  2. 使用布尔变量的$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返回“真”; \t \t \t} \t \t} \t \t回 “假”; \t} \t \t echo containsBad(“test”);'' – Bacon