PHP filter_var_array()只检查一个值是否为真?

时间:2016-12-02 13:40:15

标签: php email filter filter-var

我正在尝试检查是否有许多电子邮件地址是正确的,以便发送它们。

问题是,当我使用filter_var_array()FILTER_VALIDATE_EMAIL进行过滤时,如果所有邮件中只有一个是正确的,那么它仍会继续。

这是我的代码:

$test_email_friend = explode(",", $email_friend);
if ( !filter_var_array($test_email_friend, FILTER_VALIDATE_EMAIL)) {
    $errenvoi = "Please send only valid emails.";
} 
else {  
    //message, headers etc here
    if (mail($email_friend,$sujet,$message,$entete)){               
            $errenvoi = "Email sent !";
    } 
    else {
        $errenvoi = "Something very wrong happened, abandonship, I reapeat abandonship";            
    } 
}

例如:如果数组包含“test@test.com”和“unvalidmess”。 无论如何它都被发送了,因为其中一个值是正确的。

我该如何解决这个问题?

非常感谢

1 个答案:

答案 0 :(得分:2)

如果您阅读the docs,则表示此函数仅在失败时返回false(函数无法执行)。否则,它返回一个数组。以下是例如:

$test = array('test@test.com', 'unvalidness');
var_dump(filter_var_array($test, FILTER_VALIDATE_EMAIL));

将输出:

array(2) {
  [0]=>
  string(13) "test@test.com"
  [1]=>
  bool(false)
}

您可以通过检查失败并在返回的数组中搜索任何布尔值false来改变您的代码:

$result = filter_var_array($test, FILTER_VALIDATE_EMAIL);
if (!$result || in_array(false, $result, true)) {
    echo 'failed or data not valid';
}