多维关联数组电子邮件检查

时间:2010-09-14 15:18:39

标签: php

我有一个数组多维关联数组。

Array
(


[0] => Array
        (
            [username] => uname1
            [name] => fullname1
            [email] => uname1@email.com

        )
[1] => Array
        (
            [username] => uname2
            [name] => fullname2
            [email] => uname2

        )
[2] => Array
        (
            [username] => uname3
            [name] => fullname3
            [email] => uname3@email

        )
[3] => Array
        (
            [username] => uname4
            [name] => fullname4
            [email] => uname4@

        )

}

它应该使用正则表达式验证电子邮件地址。返回数组应该包含一个只有有效数组的数组。数组应该是

Array
(


[0] => Array
        (
            [username] => uname1
            [name] => fullname1
            [email] => uname1@email.com
}

因为[1,2,3]的电子邮件地址无效。

5 个答案:

答案 0 :(得分:5)

您可以使用array_filter对数组的每个值应用函数,并在函数返回false值的位置过滤掉这些值。要验证电子邮件地址,您可以将filter_varFILTER_VALIDATE_EMAIL结合使用:

function filter_email($item) {
    return isset($item['email']) && filter_var($item['email'], FILTER_VALIDATE_EMAIL);
}
$filtered = array_filter($arr, 'filter_email');

答案 1 :(得分:3)

每个答案都是有效的,值得一些赞成。 FWIW,我尝试运行10000次迭代,并使用microtime(true)测量经过的时间。

  • @ Gumbo的解决方案,array_filter()/filter_var():0.631秒

  • @ Gordon的解决方案,array_filter()/filter_var() w / anon功能:0.620秒。

  • @ mck89的解决方案,array_filter()/preg_match():0.307秒。

  • @ Alexander.Plutov的解决方案,foreach()/preg_match():0.193秒。

编辑:我使用a more robust email regex进行了重新测试。

答案 2 :(得分:2)

您可以使用

使用自定义回调删除所有无效的电子邮件,例如

之类的东西
$filtered = array_filter($input, function($item) {
    return filter_var($item['email'], FILTER_VALIDATE_EMAIL);
});

编辑:以上使用PHP 5.2的本机filter_var来验证电子邮件。使用显示的anyonymous functions需要PHP5.3。 See the chapter on callbacks for other types

答案 3 :(得分:2)

使用array_filter:

<?php
function filtermail($item)
{
    return preg_match($EmailValidationRegexp, $item["email"]);
}

$filtered=array_filter($array, "filtermail");
?>

答案 4 :(得分:2)

foreach ($array as $key => $value) {
   if (preg_match("/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/", $value['email'])) {
      $correct = $array[$key]; 
   }
}