当我用 X 增加总和时,我正在构建告诉用户旧以及新银行备注的应用程序。一切都很好,但我想知道我现在如何获得添加和删除数组的列表?
$old = array(1,5,10);
$new = array(1,5,1);
$added = array_diff($new,$old);
$removed = array_diff($old,$new);
这就是上面的代码返回的内容:
$added
是array()
。不正确,应为array([2] => 1)
。$removed
是array([2] => 10)
。正确的。我做错了什么,我该如何解决?
答案 0 :(得分:3)
$added = array_diff($new,$old);
在上述声明中,array_diff()
将$new
与$old
进行了比较,并返回$new
中{em>不中$old
中的值}}。没有这样的值,因此它返回一个空数组。
简而言之,array_diff()
不能处理重复值。您必须编写自定义函数才能实现此目的。这是an example:
function array_diff_once($array1, $array2) {
foreach($array2 as $val) {
if (false !== ($pos = array_search($val, $array1))) {
unset($array1[$pos]);
}
}
return $array1;
}
您可以像以前一样使用它:
$added = array_diff_once($new,$old);
$removed = array_diff_once($old,$new);
这些数组的 print_r()
将正确输出:
Array
(
[2] => 1
)
Array
(
[2] => 10
)
答案 1 :(得分:-2)
如果要检查除数组值之外的键,则应使用array_diff_assoc()而不是array_diff()
:
<?php
$old = array(1,5,10);
$new = array(1,5,1);
$added = array_diff_assoc($new,$old);
$removed = array_diff_assoc($old,$new);
echo "<pre>\n"; \\ prints array(1) { [2]=> int(1) }
var_dump($added);
var_dump($removed);
echo "</pre>\n";
&GT;