Php 按域名过滤电子邮件
假设我有两个数组-Php 按域名过滤电子邮件,php,arrays,Php,Arrays,假设我有两个数组- $EmailList1 = array("abc@domain1.com", "def@domain2.com", "ghi@domain3.com"); $EmailList2 = array("jkl@domain1.com", "mno@domain4.com", "pqr@domain5.com"); 现在我希望我的新阵列是[mno@domain4.com, pqr@domain5.com] 原因jkl@domain1.com被省略,因为它的域(domain1.co
$EmailList1 = array("abc@domain1.com", "def@domain2.com", "ghi@domain3.com");
$EmailList2 = array("jkl@domain1.com", "mno@domain4.com", "pqr@domain5.com");
现在我希望我的新阵列是[mno@domain4.com, pqr@domain5.com]
原因jkl@domain1.com被省略,因为它的域(domain1.com)已经存在于$EmailList1
我的方法是首先获取$EmailList1
的所有域,将其存储到一个数组中,循环遍历$EmailList2
的每个项,然后获取结果
这是正确的方法还是有更好的方法?试试:
$uniqueEmailsArray = array_unique(array_merge($EmailList1 , $EmailList2));
试试这个-
<?php
$EmailList1 = array("abc@domain1.com", "def@domain2.com", "ghi@domain3.com");
$EmailList2 = array("jkl@domain1.com", "mno@domain4.com", "pqr@domain5.com");
foreach($EmailList1 as $email){
$emailArray = explode('@',$email);
$domainArray[] = $emailArray[1];
}
$domains = array_unique($domainArray);
foreach($EmailList2 as $email){
$emailArray = explode('@',$email);
if(!in_array($emailArray[1], $domains) && !array_search($emailArray[1], $domains)){
$sorted_emails[] = $email;
}
}
print_r($sorted_emails);
?>
您只需要
$EmailList1 = array("abc@domain1.com","def@domain2.com","ghi@domain3.com");
$EmailList2 = array("jkl@domain1.com","mno@domain4.com","pqr@domain5.com");
$diff = array_udiff($EmailList2, $EmailList1, function ($a, $b) {
return strstr($a, '@') === strstr($b, '@') ? 0 : 1;
});
echo "<pre>";
var_dump($diff);
您只想保留第二个数组中的值并转储第一个数组中的值?
array (size=2)
1 => string 'mno@domain4.com' (length=15)
2 => string 'pqr@domain5.com' (length=15)