--$arr1----
Array
(
[0] => Array
(
[id] => 1
[Name] => AAA
)
[1] => Array
(
[id] => 6
[Name] => BBB
)
)
--$arr2---
Array
(
[0] => Array
(
[id] => 1
[Name] => AAA
)
[1] => Array
(
[id] => 6
[Name] => BBB
)
[2] => Array
(
[id] => 46
[Name] => CCC
)
)
我想要的最终结果如下。有谁可以帮助我吗?
--最终结果--
Array
(
[0] => Array
(
[id] => 46
[Name] => CCC
)
)
更新---
在这种情况下,array_diff($arr1,$arr2)的结果为空。
最简单的方法是 Mark Baker 的解决方案,或者只需编写自己的简单函数:
function arrdiff($a1, $a2) {
$res = array();
foreach($a2 as $a) if (array_search($a, $a1) === false) $res[] = $a;
return $res;
}
print_r(arrdiff($arr1, $arr2));
Array
(
[0] => Array
(
[id] => 46
[name] => CCC
)
)
$arr1 = array(array('id' => 1, 'Name' => 'AAA'),
array('id' => 6, 'Name' => 'BBB')
);
$arr2 = array(array('id' => 1, 'Name' => 'AAA'),
array('id' => 6, 'Name' => 'BBB'),
array('id' => 46, 'Name' => 'CCC')
);
$results = array_diff(array_map('serialize',$arr2),array_map('serialize',$arr1));
$results = array_map('unserialize',$results);
var_dump($results);
编辑
为了纯粹的乐趣,您可以使用 array_filter() 而不是 array_diff() - 这意味着根本不需要序列化任何东西
$results = array_filter($arr2, function ($value) use($arr1) { return !in_array($value,$arr1); } );
var_dump($results);
array_diff()
:
$finalResult = array_diff($arr2, $arr1);
如果您需要更复杂的比较,您还可以构建 foreach 循环并像这样使用:
function compareItems( $a, $b){
return $a['id'] == $b['id']; // Example compare criteria
}
$result = array();
foreach( $arr1 as $item){
foreach( $arr2 as $key => $it){
if( !compareItems( $item, $it)){
$result[] = $it; // Either build new array
unset( $arr2[$key]); // Or remove items from original array
break;
}
}
}
而且您可能希望以相反的顺序
$arr1
和 $arr2
来实现相同的功能。
你可以用 array_udiff() 来解决这个问题
function arr_comp($a, $b)
{
if ($a['id'] == $b['id'])
return 0;
else if ($a['id'] > $b['id'])
return 1;
else
return -1;
}
$result = array_udiff($arr2, $arr1, 'arr_comp');
或者如果您不知道哪个数组中可能存在差异,您可以尝试:
$res1 = array_udiff($arr1, $arr2, 'arr_comp');
$res2 = array_udiff($arr2, $arr1, 'arr_comp');
$result = array_merge($res1, $res2);
$arrDif=array();
$i=0;
foreach($arr1 as $value)
{
if(!in_array($value, $arr2))
{
$arrDif[$i]=$value;
$i++;
}
}
看一下 PHP 内置函数 array_diff。这会对你有所帮助:-) 只需传递两个数组,并存储 array_diff() 返回的数组,其中将包含两个数组之间的差异。
当您使用多维数组时,请查看 PHP 网站上的注释:http://www.php.net/manual/en/function.array-diff.php#98680.