2014-11-25 211 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>"; 
相关问题