在php中比较两个数组

时间:2011-08-06 14:35:28

标签: php arrays

我有两个名为 行和联系人 的数组。

第一个数组 就像:

Array
(
    [0] => email@gmail.com
    [1] => test@gmail.com
    [2] => tester@gmail.com
    [3] => vin@gmail.com
)

第二个阵列 联系人 如下:

Array
(
    [test@gmail.com] => test@gmail.com
    [ram@gmail.com] => Ram
    [vin@gmail.com] => Vinay
    [man_test@yahoo.com] => Manoj
    [homan@rediffmail.com] => Homan
)

我想要的是 联系人 数组:

Array
    (
        [ram@gmail.com] => Ram
        [man_test@yahoo.com] => Manoj
        [homan@rediffmail.com] => Homan
    )

修改

我尝试了一些函数,比如 array_diff(),array_keys()等,但它们没有给我所需的输出,可能是我无法正确使用它们....!< / p>

我不想为此目的使用循环,因为给定的数组只是样本数据,但实际上它们非常庞大。

请帮助.....

先谢谢.....

4 个答案:

答案 0 :(得分:3)

另一种方式:

$contacts = array_diff_key($contacts, array_flip($rows));

答案 1 :(得分:2)

foreach ($contacts as $email => $name) {
  if (!in_array($email, $rows)) {
    $contact[$email] = $name;
  }
}

新数组为$contact,而不是$contacts,因为您在编辑之前提出了问题。

答案 2 :(得分:2)

假设我正确理解了这个问题,你可以这样做:

for ($i = 0; $i < count($rows); $i++) {
    $s = $rows[$i];
    unset($contacts[$s]);
}

答案 3 :(得分:0)

由于Felix Kling和Dan Grossman的答案将适用于您展示的示例,您可能会遇到空白问题,例如数据中的换行符,尤其是如果您从文件中提取了它。所以,扩展Felix的答案:

$contacts = array_diff_key(array_map('trim', $contacts), array_flip(array_map('trim', $rows)));

您可以通过首先正确构建数据来提高效率,但这应该可以解决问题。

http://codepad.org/RIvLbyJy

相关问题