在我的https://graph.microsoft.com/beta/subscriptions
中是否可以排除in_array
中的特定字词?
例如,$row->guestEmail
和@example.com
是example1.com
值的禁止子字符串。
这是我尝试过的:
$row->guestEmail
答案 0 :(得分:1)
如果您想要一个灵活的解决方案来扩展您的电子邮件黑名单,则可以将preg_match()
与基于不合格电子邮件数组的动态正则表达式模式一起使用。
\Q...\E
语法确保模式中的符号被处理为literally
。这与preg_quote()
相同(没有函数调用)。
代码:(Demo)
$objs = (object)[
'data' => [
(object)['guestEmail' => 'bad@example.com'],
(object)['guestEmail' => 'okay@goodstuff.com'],
(object)['guestEmail' => 'nope@example1.com']
]
];
$blacklist = ['@example.com', 'example1.com'];
$regex = '~\Q' . implode('\E|\Q', $blacklist) . '\E~';
foreach ($objs->data as $row) {
if (!preg_match($regex, $row->guestEmail)) {
$emails[] = $row->guestEmail;
}
}
var_export($emails);
输出:
array (
0 => 'okay@goodstuff.com',
)
如果您不喜欢正则表达式,可以为黑名单中的每个元素迭代调用stripos()
。 stripos()
的性能将优于substr_count()
,因为substr_count()
会一直读取字符串的末尾(试图准确地找到找到的字符串数)。 stripos()
一经发现就会立即停止-这是最佳的代码设计。
代码:(Demo)
foreach ($objs->data as $row) {
foreach ($blacklist as $forbidden_string) {
if (stripos($row->guestEmail, $forbidden_string) !== false) {
continue 2;
}
}
$emails[] = $row->guestEmail;
}
// same result as first snippet
答案 1 :(得分:0)
您可以这样做:
if (!in_array($row->guestEmail, $emails)
&& date('Y-m-d', strtotime($row->endDate))== date('Y-m-d') && substr_count($row->guestEmail, 'example.com') < '1' && substr_count($row->guestEmail, 'example1.com') < '1') {
//your code
希望这对您有帮助