当前位置: 首页> 最新文章列表> array_intersect_key 和 array_diff_key 有啥不同?一文看懂两者区别

array_intersect_key 和 array_diff_key 有啥不同?一文看懂两者区别

gitbox 2025-06-09

在 PHP 中,array_intersect_keyarray_diff_key 都是数组处理函数,用来比较数组的键名,但它们的行为和用途有所不同。在这篇文章中,我们将详细讨论它们的差异,并通过实际示例帮助你更好地理解这两个函数的使用场景。

1. array_intersect_key 函数介绍

array_intersect_key 函数用来返回多个数组中,所有数组中都有的键名和对应的值。也就是说,它会返回一个新数组,其中包含所有键名在多个数组中都存在的元素。

函数原型

array array_intersect_key(array $array1, array $array2, array ...$arrays)
  • $array1:第一个要比较的数组。

  • $array2:第二个要比较的数组。

  • $arrays:可以选择多个数组进行比较。

示例代码

<?php
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 4, 'c' => 5, 'd' => 6];

$result = array_intersect_key($array1, $array2);
print_r($result);
?>

输出结果

Array
(
    [b] => 2
    [c] => 3
)

在这个例子中,array_intersect_key 返回了 $array1$array2 中都存在的键名 bc 对应的值。因此,返回的结果包含了这两个键名的值。

2. array_diff_key 函数介绍

array_diff_key 函数用来返回一个数组,该数组包含在第一个数组中,但不在其他数组中的键值对。它的作用是从第一个数组中移除那些在其他数组中也存在的键。

函数原型

array array_diff_key(array $array1, array $array2, array ...$arrays)
  • $array1:第一个数组,将与其他数组进行比较。

  • $array2:第二个要比较的数组。

  • $arrays:可以选择多个数组进行比较。

示例代码

<?php
$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 4, 'c' => 5, 'd' => 6];

$result = array_diff_key($array1, $array2);
print_r($result);
?>

输出结果

Array
(
    [a] => 1
)

在这个例子中,array_diff_key 返回了 $array1 中键名为 a 的元素,因为这个键在 $array2 中不存在。

3. 主要区别

array_intersect_keyarray_diff_key 的主要区别在于:

  • array_intersect_key 返回的是在所有数组中都存在的键值对。

  • array_diff_key 返回的是在第一个数组中存在,但不在其他数组中的键值对。

例如

假设你有三个数组:

$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['b' => 4, 'c' => 5, 'd' => 6];
$array3 = ['c' => 7, 'd' => 8];
  • array_intersect_key($array1, $array2, $array3) 将返回 ['c' => 3],因为 c 是所有数组中都有的键。

  • array_diff_key($array1, $array2, $array3) 将返回 ['a' => 1, 'b' => 2],因为 ab 仅存在于 $array1 中,而不在 $array2$array3 中。

4. 总结

  • array_intersect_key 用于找到多个数组中都有的键,并返回这些键及其对应的值。

  • array_diff_key 用于找到在第一个数组中有,但在后续数组中没有的键,并返回这些键及其对应的值。

这两个函数在数组操作中非常有用,特别是在需要基于键名进行比较和筛选的场景中。理解它们的区别,可以帮助你更加高效地处理 PHP 数组。