2014-11-08 2 views
0

У меня есть два списка электронной почты из разных источников (MySQL, Excel), похожие на два моих примера . Я создал два массива в php, чтобы сравнить их. Массив «$ mail_old» - это главный список с несколькими сотнями адресов, а в «$ mail_new» есть изменения. имена те же, но некоторые из доменов изменены.PHP сравнить массивы и заменить значения

Сначала я хочу проверить, какие из новых адресов не встречаются в старом списке, который работает просто отлично. Но я не могу найти способ их замены. Array_replace(), похоже, не помогает Вот. array_diff() также работал для проверки различий, но я не понимаю.

вот что я получил до сих пор, было бы здорово, если бы кто-нибудь мог дать мне подсказку, как , чтобы заменить старые адреса новыми.

Большое спасибо!

<?php 
 
    $mail_old = array('[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]', '[email protected]',); 
 
    $mail_new = array('[email protected]', '[email protected]', '[email protected]', '[email protected]'); 
 

 
    foreach ($mail_new as $changed) { 
 
     if (!in_array($changed, $mail_old)) { 
 
      echo 'Address ' . $changed . ' is new.<br />'; 
 
     } 
 
    } 
 
?>

+0

Каких старые адреса должны быть заменены? В вашем примере нет адресов, в которых домен изменился. – Barmar

+1

Что произойдет, если в разных доменах есть два одинаковых имени? '[email protected], john @ example2.org'? – Barmar

+0

Я имею в виду что-то вроде «[email protected]», которое должно быть заменено на «[email protected]» – booog

ответ

0

Сделать ассоциативный массив, который заклиненный от имени в $mail_old:

$mail_by_name = array(); 
foreach ($mail_old as $i => $addr) { 
    list ($name, $domain) = explode('@', $addr); 
    $mail_by_name[$name] = $i; 
} 

Затем проверить каждое имя в новом массиве против этого:

foreach ($mail_new as $changed) { 
    list($name, $domain) = explode('@', $changed); 
    if (isset($mail_by_name[$name])) { 
     if ($mail_old[$mail_by_name[$name]] != $changed) { 
      echo 'Address ' . $mail_old[$mail_by_name[$name]] . ' changed to ' . $changed . '.</br>'; 
      $mail_old[$mail_by_name[$name]] = $changed; 
     } 
    } else { 
     echo 'Address ' . $changed . ' is new.<br />'; 
    } 
} 
+0

Отлично, большое спасибо, Бармар! – booog

+0

Это работает и получит результат, который я не смог найти. Поэтому важной частью обучения для меня является создание нового массива вместо поиска всех видов функций массива. Еще раз спасибо, ты мне очень помог, и невероятно быстро! – booog

Смежные вопросы