减去数组以获得每个差异

时间:2015-04-20 09:44:32

标签: php arrays

我有什么

$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] = []

5 个答案:

答案 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()吗?

http://php.net/manual/en/function.array-diff-assoc.php

答案 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);
?>