I have an array multidimensional associative array.
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@
)
}
It should validate email address using the regular expression.The return array should consists of an array with only valid array.The array should be
Array
(
[0] => Array
(
[username] => uname1
[name] => fullname1
[email] => uname1@email.com
}
since [1,2,3] have invalid email address.
Each of the answers is valid, and deserve some upvotes. FWIW, I tried running each over 10000 iterations, and measured the elapsed time using microtime(true)
.
@Gumbo's solution, array_filter()/filter_var()
: 0.631 sec.
@Gordon's solution, array_filter()/filter_var()
w/anon function: 0.620 sec.
@mck89's solution, array_filter()/preg_match()
: 0.307 sec.
@Alexander.Plutov's solution, foreach()/preg_match()
: 0.193 sec.
edit: I re-tested with a more robust email regex.
You can use
array_filter
— Filters elements of an array using a callback functionwith a custom callback that removes all invalid eMails, e.g. something like
$filtered = array_filter($input, function($item) {
return filter_var($item['email'], FILTER_VALIDATE_EMAIL);
});
EDIT: the above uses PHP 5.2's native filter_var
to validate the eMail. Using the shown anyonymous functions requires PHP5.3. See the chapter on callbacks for other types.
Use array_filter:
<?php
function filtermail($item)
{
return preg_match($EmailValidationRegexp, $item["email"]);
}
$filtered=array_filter($array, "filtermail");
?>
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];
}
}
You can use array_filter
to apply a function on each value of an array and filter those values out where the function returns a false value. And to validate the email address, you can use filter_var
in combination with FILTER_VALIDATE_EMAIL:
function filter_email($item) {
return isset($item['email']) && filter_var($item['email'], FILTER_VALIDATE_EMAIL);
}
$filtered = array_filter($arr, 'filter_email');