使用php从两个数组中删除重复的键

使用php从两个数组中删除重复的键,php,arrays,Php,Arrays,我想从两个数组中删除重复的键 我的代码是 $arr1[22068] = array('ID' => 22068); $arr1[22067] = array('ID' => 22067); $arr2[22068] = array('ID' => 22068); $arr2[22066] = array('ID' => 22066); $arr = array_diff($arr1, $arr2); var_dump($arr); //It outputs null.

我想从两个数组中删除重复的键

我的代码是

$arr1[22068] = array('ID' => 22068);
$arr1[22067] = array('ID' => 22067);
$arr2[22068] = array('ID' => 22068);
$arr2[22066] = array('ID' => 22066);

$arr = array_diff($arr1, $arr2);

var_dump($arr); //It outputs null.
最后一个数组应该如下所示--

非常感谢您的帮助。

正是您所需要的

$arr1[22068] = array('ID' => 22068);
$arr1[22067] = array('ID' => 22067);
$arr2[22068] = array('ID' => 22068);
$arr2[22066] = array('ID' => 22066);

// Get elements of array 1 which are not present in array 2
$unique_1 = array_diff_key($arr1, $arr2);

// Get elements of array 2 which are not present in array 1
$unique_2 = array_diff_key($arr2, $arr1);

// Merge unique values
$unique = $unique_1 + $unique_2;
这就是你想要的

$arr1[22068] = array('ID' => 22068);
$arr1[22067] = array('ID' => 22067);
$arr2[22068] = array('ID' => 22068);
$arr2[22066] = array('ID' => 22066);

// Get elements of array 1 which are not present in array 2
$unique_1 = array_diff_key($arr1, $arr2);

// Get elements of array 2 which are not present in array 1
$unique_2 = array_diff_key($arr2, $arr1);

// Merge unique values
$unique = $unique_1 + $unique_2;

因此,array_diff将为您提供array1与array2的不同之处,并且不适用于多维阵列。您可以切换到array_key_diff,但是,您会遇到类似的问题:

$arr1[22068] = array('ID' => 22068);
$arr1[22067] = array('ID' => 22067);
$arr2[22068] = array('ID' => 22068);
$arr2[22066] = array('ID' => 22066);

$arr = array_diff_key($arr1, $arr2);

var_dump($arr); //It outputs array(1) {[22067]=> array(1) { ["ID"]=> int(22067) } }
我不知道有什么“神奇”的解决方案会带来这些差异,但是,您确实可以选择,您可以使用上面的代码,并为以下内容添加一行:

$arr2 = array_diff_key($arr2, $arr1);
var_dump($arr2)

然后合并$arr和$arr2,或者您可以编写一个循环,遍历并比较每个项目。取决于大小、范围、可读性等将取决于实际设置,因此array_diff将为您提供array1与array2中的不同之处,并且不适用于多维数组。您可以切换到array_key_diff,但是,您会遇到类似的问题:

$arr1[22068] = array('ID' => 22068);
$arr1[22067] = array('ID' => 22067);
$arr2[22068] = array('ID' => 22068);
$arr2[22066] = array('ID' => 22066);

$arr = array_diff_key($arr1, $arr2);

var_dump($arr); //It outputs array(1) {[22067]=> array(1) { ["ID"]=> int(22067) } }
我不知道有什么“神奇”的解决方案会带来这些差异,但是,您确实可以选择,您可以使用上面的代码,并为以下内容添加一行:

$arr2 = array_diff_key($arr2, $arr1);
var_dump($arr2)

然后合并$arr和$arr2,或者您可以编写一个循环,遍历并比较每个项目。取决于大小、范围、可读性等,将取决于22068的实际设置,但为什么是22066?请澄清您的具体问题或添加其他详细信息,以准确强调您需要的内容。正如目前所写的,很难准确地说出你在问什么。有关澄清此问题的帮助,请参见页面。@CharlotteDunois我已更新了帖子。我希望将密钥22068从两个数组中删除,并生成一个新数组。使用
foreach()
循环很容易,但可能有人会用更性感的解决方案来回答。我不懂语言,但问题是否涉及1-1=0?我理解22068,但为什么是22066?请澄清您的具体问题,或添加其他详细信息,以突出您所需要的内容。正如目前所写的,很难准确地说出你在问什么。有关澄清此问题的帮助,请参见页面。@CharlotteDunois我已更新了帖子。我希望将密钥22068从两个数组中删除并生成一个新数组。使用
foreach()
循环很容易,但可能有人会用更性感的解决方案来回答。我不懂语言,但问题是否涉及1-1=0?您应该使用
$unique=$unique\u 1+$unique\u 2
以保留原始数字键
array_merge
将数字键
22067
22066
重置为
0
1
。非常感谢您的解答和解释。@krlv感谢您指出这一点。我丢失了原来的钥匙。现在可以了。你应该使用
$unique=$unique\u 1+$unique\u 2
以保留原始数字键
array_merge
将数字键
22067
22066
重置为
0
1
。非常感谢您的解答和解释。@krlv感谢您指出这一点。我丢失了原来的钥匙。现在没事了。也谢谢你的帮助。也谢谢你的帮助。