找出数组中添加和删除了哪些项目

Pet*_*tja 3 php arrays comparison

我正在构建应用程序,当我用X增加总和时,它会告诉用户哪些是钞票,哪些是钞票。一切都很好,但我想知道现在如何获取数组中添加和删除项目的列表?

$old = array(1,5,10);
$new = array(1,5,1);

$added = array_diff($new,$old);
$removed = array_diff($old,$new);
Run Code Online (Sandbox Code Playgroud)

这就是上面的代码返回的内容:

  • $addedarray()。不对,应该是array([2] => 1)
  • $removedarray([2] => 10)。正确的。

我做错了什么,我该如何解决?

Ama*_*ali 5

 $added = array_diff($new,$old);
Run Code Online (Sandbox Code Playgroud)

在上面的语句中,与array_diff()进行比较并返回 中不存在值。没有这样的值,因此它返回一个空数组。$new$old$new$old

简而言之,array_diff()不适用于重复值。您必须编写一个自定义函数来实现此目的。这是一个例子

function array_diff_once($array1, $array2) {
    foreach($array2 as $val) {
        if (false !== ($pos = array_search($val, $array1))) {
            unset($array1[$pos]);
        }    
    }
    return $array1;
}
Run Code Online (Sandbox Code Playgroud)

您可以像以前一样简单地使用它:

$added   = array_diff_once($new,$old);
$removed = array_diff_once($old,$new);
Run Code Online (Sandbox Code Playgroud)

print_r()这些数组将正确输出:

 $added = array_diff($new,$old);
Run Code Online (Sandbox Code Playgroud)

工作演示