PHP:检查字符串是否是数组的一部分

时间:2016-02-16 14:28:18

标签: php arrays

我正在开发基于PHP的小票务系统。

现在我想将发件人排除在处理之外。

这是排除发件人的可能列表:

Array ( 
"badboy@example.com",
"example.org",
"spam@spamming.org"
)

好的 - 现在我想检查一下邮件的发件人是否与其中一个匹配:

$sender = "badboy@example.com";

我认为这很容易,我想我可以用in_array()解决这个问题。

但是

$sender = "me@example.org";

example.org在数组中定义,但不是me@example.org - 但me@example.org也应排除在外,因为example.org位于forbidden-senders-list中。

我怎么解决这个问题?

2 个答案:

答案 0 :(得分:1)

也许您正在寻找stripos功能。

<?php

if (!disallowedEmail($sender)) { // Check if email is disallowed
    // Do your stuff
}

function disallowedEmail($email) {
    $disallowedEmails = array ( 
        "badboy@example.com",
         "example.org",
         "spam@spamming.org"
     )
     foreach($disallowedEmails as $disallowed){
         if ( stripos($email, $disallowed) !== false)
             return true;
     }
     return false
}

答案 1 :(得分:0)

striposimplodeexplode功能的另一个简短替代方案:

$excluded = array( 
"badboy@example.com",
"example.org",
"spam@spamming.org"
);

$str = implode(",", $excluded);  // compounding string with excluded emails
$sender = "www@example.com";
//$sender = "me@example.org";

$domainPart = explode("@",$sender)[1];  // extracting domain part from a sender email

$isAllowed = stripos($str, $sender) === false && stripos($str, $domainPart) === false;

var_dump($isAllowed);    // output: bool(false)