我正试图在2个数组中找到差异。
$inven_old = array(1,2,3,4);
$inven_new = array(1,2,3,4,5);
$result = array_diff($inven_old, $inven_new);
print_r($result);
为什么结果没什么?
不应该是“5”吗?
如果没有,我该怎样做我想做的事情?
答案 0 :(得分:6)
返回一个数组,其中包含array1中任何其他数组中不存在的条目。
http://php.net/manual/en/function.array-diff.php
array_diff()
给出从第一个开始减去除第一个之外的所有数组的结果。因此,第二个数组中但不是第一个数组中的内容将不会显示。 (换句话说,它不是对称的区别。)
答案 1 :(得分:2)
http://www.php.net/manual/en/function.array-diff.php
返回一个数组,其中包含array1中任何其他数组中不存在的条目。
所以,如果你这样做:
$result = array_diff($inven_new, $inven_old);
结果将包含“5”。
加分:如果你需要的东西无论数组的顺序如何都可以,请尝试:
$result = array_diff($a + $b, array_intersect($a, $b));
答案 2 :(得分:1)
一个非常晚的回应,但也许这会有时帮助某人..
function array_deep_diff($d1, $d2) {
if (is_array($d1) && is_array($d2)) {
$diff = array();
foreach (array_unique(array_merge(array_keys($d1), array_keys($d2))) as $key) {
if (!array_key_exists($key, $d1)) {
$diff['added'][$key] = $d2[$key];
} else if (!array_key_exists($key, $d2)) {
$diff['removed'][$key] = $d1[$key];
} else {
$tmp = array_deep_diff($d1[$key], $d2[$key]);
if (!empty($tmp)) $diff[$key] = $tmp;
}
}
return $diff;
} else if (!is_array($d1) && !is_array($d2)) {
if ($d1 == $d2) return array();
$ret = "$d1 ---> $d2";
// just a little touch for numerics, might not be needed
if (is_numeric($d1) && is_numeric($d2)) {
if ($d1 > $d2) $ret .= ' [- ' . ($d1 - $d2) . ']';
if ($d1 < $d2) $ret .= ' [+ ' . ($d2 - $d1) . ']';
}
return $ret;
} else {
return array('Array compared with NonArray');
}
}
答案 3 :(得分:0)
第二个阵列应该是第一个
$inven_old = array(1,2,3,4);
$inven_new = array(1,2,3,4,5);
$result = array_diff($inven_new, $inven_old);
print_r($result);
答案 4 :(得分:0)
让它按预期工作,你需要反转参数:
$result = array_diff($inven_new, $inven_old);
否则你正在检查在invent_new中缺少哪些元素,并且没有遗漏任何元素。
答案 5 :(得分:0)
没有内置功能,但您可以轻松编写自定义功能(http://ideone.com/UNRKV):
$old = array(5,5,4);
$new = array(5,5,4,4);
function array_subtract($a, $b)
{
foreach ($b as $val) {
$i = array_search($val, $a);
if ($i !== false) {
unset($a[$i]);
}
}
return array_values($a);
}
$result = array_subtract($new, $old);
var_dump($result);
答案 6 :(得分:0)
这消耗来自第一个数组($old
),直到所有数据都消失:
$result = array();
$old = array_count_values($old);
foreach($new as $value)
{
@$old[$value] ? $old[$value]-- : $result[] = $value;
}
结果:
$old = array(5,5,4);
$new = array(5,5,4,4);
...
array(1) {
[0]=>
int(4)
}