2013-03-05 62 views
1

我有一个脚本有两个数组,初始数据数组($initial)和修改后的数据数组($modified),但我在检测差异时遇到了问题阵列之间。我需要确定哪些值(它们之间的键会有所不同)已被添加,哪些值已被删除,然后将更改放入两个数组中($dataAdded$dataRemoved)。检测哪些值已添加并从阵列中删除

是否有任何功能可以做到这一点,或者如果没有,是否有我可以遵循的任何概念?

回答

1

array_diff()可以做到这一点。

<?php 
$initial = array(1,2,3,4,5,6,7,8); 
$modified = foo($initial); 

$removed = array_diff($initial, $modified); 
$added = array_diff($modified, $initial); 

echo 'removed=', join(', ', $removed), "\n"; 
echo 'added=', join(', ', $added), "\n"; 

function foo($a) { 
    // "removing" all odd numbers 
    // and "adding" 10,12,14,16 
    return array_map(function($e) { return $e*2; }, $a); 
} 

打印

removed=1, 3, 5, 7 
added=10, 12, 14, 16 
+0

即通过密钥去,而键将被改变,因为在阵列中的条目的位置可以是不同的,但它只需要的值的存在是存在/不存在 – topherg 2013-03-05 13:32:49

+0

哦,我误解了问题....更新了。 – VolkerK 2013-03-05 13:33:34

+0

不错,这会比我的方法更快吗(当然更清洁)? – topherg 2013-03-05 13:58:04

0

我要取消的问题,但我觉得有可能是有类似的问题有用的人,或者如果在这里一些愚蠢的事情,我已经错过了,但不管怎么说:

我用下面的:

$dataAdded = array(); 
$dataRemoved = array(); 
foreach ($modified as $data) { 
    if (!in_array($data, $initial)) { 
     $dataAdded[] = $data; 
    } 
} 
foreach ($initial as $data) { 
    if (!in_array($data, $modified)) { 
     $dataRemoved[] = $data; 
    } 
}