2012-10-23 129 views
0

好的。我有2个数组。一个是原始数据,另一个是新数据。他们之间可能有匹配的值。我需要做的,是从新的入站数组中找出什么是新的,什么是匹配,什么不匹配。现在我整天都在编写代码,所以我觉得在这种状态下逻辑是有道理的,但并不是那么光秃秃的。PHP比较两个数组,并有三个结果集,匹配和不匹配的结果集

最终目标是我需要这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 
    ) 

它可能不是现货,因为我显然只是用手输入这些......但希望它能证明我在某种程度上试图达到什么

+1

您可以添加输入数据和预期的输出数据吗?它将有助于回答你的问题。 – Alex

+2

查看PHP函数'array_diff'和'array_intersect'。 – Barmar

+0

@AlexJoyce,已更新。 Barmar,我会看看是否有帮助,谢谢 – chris

回答

2

Barmar的评论我s正确,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); 
} 

我的猜测......你处理复选框或多种选择,以确定哪些保留,哪些要添加什么删除。

+0

,先生真棒,谢谢。Barmar建议我研究这些功能,我只是通过它们阅读它们。谢谢。 – chris

相关问题