如何获得两个数组的差异

时间:2014-12-23 07:34:59

标签: php arrays

所以当我执行var_dump时,我有两个这样的数组:

array(4) { 
    ["DatabinFieldName_1"]=> string(7) "Heading" 
    ["DatabinFieldType_1"]=> string(13) "VARCHAR (255)" 
    ["DatabinFieldName_3"]=> string(11) "DateCreated" 
    ["DatabinFieldType_3"]=> string(8) "DATETIME" 
}

array(8) { 
    ["DatabinFieldName_1"]=> string(7) "Heading" 
    ["DatabinFieldType_1"]=> string(13) "VARCHAR (255)" 
    ["DatabinFieldName_2"]=> string(4) "Copy" 
    ["DatabinFieldType_2"]=> string(4) "TEXT" 
    ["DatabinFieldName_3"]=> string(11) "DateCreated" 
    ["DatabinFieldType_3"]=> string(8) "DATETIME" 
    ["DatabinFieldName_4"]=> string(8) "Comments" 
    ["DatabinFieldType_4"]=> string(4) "TEXT" 
}

我需要在结果中找到差异。我尝试过使用此代码。

// Get POST Array                               
$databinPostArray = $_POST;                             

// Get Databin Array
$databinObject =json_decode($nbase->getwhere("Databins","ID='".$databinID."' LIMIT 1;",$_SESSION["UserDB"]));
$databinArray= unserialize($databinObject[0]->DatabinArray);

var_dump($databinPostArray);
var_dump($databinArray);

$result = array_diff($databinPostArray, $databinArray);

print_r($result);

问题是我不断回复Array(),这意味着它没有找到任何差异,即使有。

2 个答案:

答案 0 :(得分:2)

array_diff()返回第二个数组中不在第一个数组中的元素。所以问题的答案是:

$result = array_diff($databinPostArray, $databinArray);
if (couunt($result) == 0) {
    $result = array_diff($databinArray, $databinPostArray);
}

这样,无论$databinPostArray还是$databinArray中是否有更多键,都会返回差异。

如果您想要的只是检查$databinArray中的哪些元素,而不是$databinPostArray中的元素,请执行以下操作:

$result = array_diff($databinArray, $databinPostArray);

答案 1 :(得分:0)

您需要撤消参数:

$result = array_diff($databinArray, $databinPostArray);

array_diff返回一个数组,其中第一个数组中的所有内容都不在第二个数组中。

如果要获取任一阵列唯一的所有元素,可以使用:

$result = array_diff(array_unique(array_merge($databinArray, $databinPostArray)),
                     array_intersect($databinArray, $databinPostArray));