如何获取两个数组的差异[关闭]

问题描述 投票:0回答:2

所以我有两个数组,当我执行 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()
回来,这意味着即使存在差异也没有发现任何差异。

php arrays
2个回答
2
投票

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

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

这样,无论

$databinPostArray
中的键多还是
$databinArray
中的键多,都会返回差值。

如果您只想检查哪些元素在

$databinArray
中,而不是在
$databinPostArray
中,请执行以下操作:

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

0
投票

你需要颠倒论点:

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

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

如果你想获取任一数组唯一的所有元素,可以使用:

$result = array_diff(array_unique(array_merge($databinArray, $databinPostArray)),
                     array_intersect($databinArray, $databinPostArray));
© www.soinside.com 2019 - 2024. All rights reserved.