我有什么
$array1 = [1,1,1];
$array2 = [1,1];
我在做什么:
array_diff( $array1, $array2 );
我的期望:
array(1) { 1 }
我得到了什么
array(0) { }
如何减去两个数组以获得每个差异?
编辑: 我的例子不完整,抱歉。
如果我们也有这样的值:
$array1 = [1,1,2,1];
$array2 = [1,1,1,2];
我希望
[1,1,2,1] - [1,1,1,2] = []
答案 0 :(得分:2)
array_diff_assoc()
是去这里的正确方法。但要获得预期结果,您只需先使用usort()
对数组进行排序,然后将值与strcasecmp()
进行比较。
所以这对你有用:
<?php
$array1 = [1,1,2,1];
$array2 = [1,1,1,2];
function caseCmpSort($a, $b){
return strcasecmp($a, $b);
}
usort($array1, "caseCmpSort");
usort($array2, "caseCmpSort");
$result = array_diff_assoc($array1, $array2);
print_r($result);
?>
输出:
Array ( )
答案 1 :(得分:1)
使用array_diff_assoc
$array1 = [1,1,1];
$array2 = [1,1];
print_r(array_diff_assoc( $array1, $array2)); // outputs Array ([2] => 1)
在这里试试http://sandbox.onlinephpfunctions.com/code/43394cc048f8c9660219e4fa30386b53ce4adedb
答案 2 :(得分:0)
所以你也应该检查数组键差异。你试过array_diff_assoc()吗?
答案 3 :(得分:0)
来自manual:
Returns an array containing all the entries from array1 that are not present in any of the other arrays.
所以,它按预期工作。我不确定你想要实现什么。你试试云,它应该在这个例子中给你预期的结果。
$a = [1,1,1];
$b = [1,1];
print_r(array_diff_assoc($a,$b));
编辑:简单的排序应该可以解决您的评论问题。不,这将删除元素原始索引的信息。
$a = [1,1,2,1];
$b = [1,1,1,2,1];
sort($a);
sort($b);
print_r(array_diff_assoc($a,$b));
答案 4 :(得分:-1)
<?php
$n = array(1,1,1);
$m = array(1,1);
$r = array_diff_assoc($n,$m);
var_dump($r);
?>