检测已从数组中添加和删除的值

时间:2013-03-05 13:23:30

标签: php arrays

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

是否有任何可用的功能可以执行此操作,如果没有,是否有任何可以遵循的概念?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
    }
}