-1

我有 2 个数组。一个是原始数据,另一个是新数据。在他们两个之间可能有匹配的值。我需要从新的入站数组中找出什么是新的,什么是匹配的,什么不是匹配的。

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

我正在考虑从 3 个空白数组开始填充的程度,因为我循环遍历原始数组或新数组,并比较它们将每种类型的旧、新、删除到相应的数组,以便我可以在那里处理结果后。我可以在脑海中拼凑出一个想法,该想法适用于 2 个数组作为输出,但第三个我迷路了。所以我暂时对这一点有所阻碍。寻求建议和/或帮助创建一个循环或更好的东西,这将产生我正在寻找的 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
   )

它可能不会出现,因为我显然只是手动输入了这些......但希望它在某种程度上展示了我试图实现的目标

4

1 回答 1

3

Barmar 的评论是正确的,array_diff并且array_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);
}

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

于 2012-10-23T04:39:05.930 回答