2014-11-25 207 views
1

我一直在谷歌和這個平臺上尋找答案,但我無法使它工作。因此,這裏是我的情況:PHP:檢查對象是否包含數組中的字符串

我想要什麼:

要檢查每一個對象是否包含在一個陣列和傳遞這種情況下只輸出對象定義的字符串。

什麼我:

$mail_body = "<table>.....</table>"; 
$blacklist = array("PCabc", "PCxyz"); 

foreach($blacklist as $blacklists){ 
       if (strpos($mail_body, $blacklists) !== false){ 


       echo "<br>".$mail_body."<br>"; 
       } 
} 

原來。這個代碼實際上是一個可用的白名單。^^

但我想要的是相反的,但如果我將!== false更改爲== false,它只會輸出數組中每個字符串的對象。因此,如果我在$blacklist中獲得了5個項目,它將爲每個對象輸出5次相同的結果。

回答

2

您需要將echo置於循環之外。例如:

$mail_body = "<table>.....</table>"; 
$blacklist = array("PCabc", "PCxyz"); 
$output = true; 

foreach($blacklist as $blacklists){ 
    if (strpos($mail_body, $blacklists) !== false){ 
     $output = false; 
     break; 
    } 
} 

if ($output) { 
    echo "<br>".$mail_body."<br>"; 
} 
+2

'==!假'並添加一個'break'。無需繼續迭代。 – BreyndotEchse 2014-11-25 09:40:53

+0

你說得對。謝謝,回答編輯。 – panther 2014-11-25 09:41:48

2

一點點的解決辦法,出來foreach循環,並設置爲根據的isBlackListed價值balacklisted words.After的存在的標誌,進行

$mail_body = "<table>.....</table>"; 
$blacklist = array("PCabc", "PCxyz"); 

$isBlackListed = false; //initialize to false 

foreach($blacklist as $blacklists){ 
     if (strpos($mail_body, $blacklists) !== false){ 
       $isBlackListed = true; 
       //on encounter of blacklisted word , set this to true 
     } 
} 

// proceed based on $isBlacklisted value 

if(!$isBlackListed) 
    echo "<br>".$mail_body."<br>"; 
相關問題