我一直在谷歌和这个平台上搜索寻找答案,但我无法让它工作。所以这是我的情况:
我想要什么:
检查每个对象是否包含数组中定义的字符串,并且仅输出通过此条件的对象。
我得到了什么:
$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 倍相同的内容。
你需要把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>";
}
一点解决方法,从 foreach
LOOP 中出来,并为巴拉克列表单词的存在设置一个标志。之后根据isBlackListed
的值,继续
$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>";