PHP比较两个数组并有三个结果集,匹配和不匹配的结果集

时间:2012-10-23 03:57:01

标签: php arrays

确定。我有2个阵列。一个是原始数据,另一个是新数据。在其中两个之间可能存在匹配值。而我需要做的是,从新的入站数组中找出新的,最新的匹配,什么不匹配。现在,我整天都在编码,因此我对那种逻辑有意义但却没有那么光秃的状态感到满意。

最终目标是我需要这3个数组,其中一个项目是从原始数据中删除的,其中一个项目是新条目,然后是原始条目,它们匹配新条目中的任何内容。

我正在考虑开始使用3个空白数组填充的程度,因为我循环原始或新的循环并比较它们添加旧的,新的,删除到相应的数组所以我可以使用之后的结果。我可以在脑海中拼凑出一个适用于2个数组作为输出的想法,但第3个我迷失了。所以我暂时对这一点有所了解。寻找建议和/或帮助创建一个循环或更好的东西,将产生我正在寻找的3组结果。

编辑概念数组中的添加

数据库中的原始数据数组:

Array(
      15,
      22,
      100,
      1500,
      2000,
      500,
      3000,
      1101
   )

入站新数据数组

Array(
      100,
      800,
      920,
      1500,
      2000,
      1603,
      500,
      3000,
      1101
   )

原始和新入站之间的预期匹配数组:

Array(
      100,
      1500,
      2000,
      500,
      3000,
      1101
   )

原始和新的预期“新”条目数组:

Array(
      100,
      800,
      920,
      1603
   )

来自旧版本的原始和新版本之间不匹配的预期条目数组:

Array(
      15,
      22
   )

它可能不是现场,因为我显然只是手工输入这些......但希望它能说明我试图在某种程度上实现的目标

1 个答案:

答案 0 :(得分:2)

Barmar的评论是正确的,array_diffarray_intersect是你想要的。你的问题中有一个拼写错误,但匹配和新值数组中都会出现“100”。

<?php
$orig = array(15, 22, 100, 1500, 2000, 500, 3000, 1101);
$post = array(100, 800, 920, 1500, 2000, 1603, 500, 3000, 1101);

// Gets things in both arrays
$matches = array_intersect($orig, $post);
// Gets things in $post that aren't in $orig
$new     = array_diff($post, $orig);
// Gets things in $orig that aren't in $post
$removed = array_diff($orig, $post);

foreach (array($orig, $post, $matches, $new, $removed) as $array) {
    print_r($array);
}

我的猜测......您正在处理复选框或多项选择,以确定要保留的内容,要添加的内容以及要删除的内容。