我有一个包含两个数组的脚本,初始数据数组 ( $initial
) 和修改后的数据数组 ( $modified
),但在检测数组之间的差异时遇到了问题。我需要确定添加了哪些值(它们之间的键将不同),以及删除了哪些值,然后将更改放入两个数组中($dataAdded
和$dataRemoved
)。
是否有任何功能可以做到这一点,或者如果没有,是否有任何我可以遵循的概念?
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
我打算取消这个问题,但我觉得可能对遇到类似问题的其他人有用,或者如果这里有一些我错过的愚蠢的东西,但无论如何:
我使用了以下内容:
$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;
}
}