2017-04-02 176 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