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

PHP filter_var_array() only check if one value is true?

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

问题是,当我用 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"。 无论如何都发送了,因为其中一个值是正确的。

我该如何解决这个问题?

非常感谢

如果您阅读 the docs,它表示此函数仅 returns false 失败(函数无法执行)。否则,它 returns 一个数组。所以下面的例子:

$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';
}