PHP比较数组并替换值

时间:2014-11-08 16:14:20

标签: php arrays replace

我有两个来自不同来源(MySQL,Excel)的电子邮件列表,类似于我的两个 例。我在php中创建了两个数组,比较它们。 " $ mail_old" array是包含数百个地址的主列表,并且在" $ mail_new" 有变化。名称相同,但有些域名发生了变化。

首先,我想检查哪些新地址不会出现在旧列表中,哪个 工作得很好。但我没有找到替换它们的方法,array_replace()似乎没有帮助。 array_diff()也用于检查差异,但我没有进一步。

这是我到目前为止所得到的,如果有人能给我一个提示,那将会很棒 将旧地址替换为新地址。

非常感谢!



<?php
    $mail_old = array('peter@example.com', 'paul@example.org', 'max@example.com', 'mary@example.com', 'john@example.com', 'steve@example.org', 'sue@example.com', 'lisa@example.com', 'teo@example.com',);
    $mail_new = array('peter@example.org', 'paul@example.org', 'john@example.org', 'steve@example.org');

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

1 个答案:

答案 0 :(得分: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 />';
    }
}