2014-11-08 7 views
0

다른 소스 (MySQL, Excel)의 두 전자 메일 목록을 가지고 있습니다. 비슷한 두 가지 예 ( ). PHP 2에서 두 배열을 비교했습니다. "$ mail_old"배열은 수백 개의 주소가있는 주 목록이고 "$ mail_new"에는 에 변경 사항이 있습니다. 이름은 동일하지만 일부 도메인이 변경되었습니다.PHP는 배열을 비교하고 값을 바꿉니다.

새 주소 중 어떤 것이 원래 위치에 없는지 확인하고 싶습니다. 대체 할 수있는 방법을 찾지 못했지만, array_replace()가 도움이되지 않습니다. 이리. array_diff()도 차이점을 확인하기 위해 노력했지만 더 이상 얻지는 못합니다.

여기까지 왔는데 누군가가 나에게 힌트를 줄 수 있다면 얼마나 좋을까. 새 주소로 이전 주소를 바꾸는 방법.

고맙습니다.

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

다음이에 대해 새로운 배열의 각 이름을 테스트 :

+0

을 어느 이전 주소는 대체되어야합니까? 예제에는 도메인이 변경된 주소가 없습니다. – Barmar

+1

다른 도메인에 같은 이름의 주소가 두 개 있으면 어떻게됩니까? '[email protected], john @ example2.org'? – Barmar

+0

"[email protected]"과 같은 의미입니다. "[email protected]"로 바꿔야합니다. – booog

답변

0

<?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 />'; 
 
     } 
 
    } 
 
?>
$mail_old에 이름을 키가있어 연관 배열 확인

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

관련 문제