0

2つの配列があるとしましょう-

$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]にします。

すでに存在するドメイン(domain1.com)があるため、 jkl@ domain1.comが省略された理由$EmailList1

私のアプローチは、最初にのすべてのドメインを取得し、$EmailList1それを配列に格納し、の各項目をループしてから$EmailList2結果を取得することです。

これは正しい方法ですか、それとももっと良い方法があるでしょうか?

4

3 に答える 3

1

あなたに必要なのは

$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)
于 2013-01-08T12:07:57.007 に答える
0

試す:

$uniqueEmailsArray = array_unique(array_merge($EmailList1 , $EmailList2));
于 2013-01-08T11:58:36.750 に答える
0

これを試して -

<?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);
?>
于 2013-01-08T12:05:20.460 に答える