PHP сравнивает массивы и заменяет значения

0

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

сначала я хочу проверить, какие из новых адресов не встречаются в старом списке, который работает только fine.but, я не нахожу способ их замены, 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 />';
        }
    }
?> 
Теги:
arrays
replace

1 ответ

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
    Отлично, большое спасибо, Бармар!
  • 0
    Это работает и получит результат, который я не смог найти сам. Поэтому важной частью обучения для меня является создание нового массива вместо поиска всех видов функций массива. Еще раз спасибо, вы мне очень помогли, и невероятно быстро!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню