当前位置: 首页> 最新文章列表> array_diff_key() 与 array_diff_assoc() 有何不同?

array_diff_key() 与 array_diff_assoc() 有何不同?

M66 2025-06-06

在 PHP 中,array_diff_key()array_diff_assoc() 都是用于比较数组的函数,但它们的比较方式和适用场景有明显的不同。本文将详细解释这两个函数的区别,并讨论它们各自的使用场景。

1. array_diff_key() 函数

array_diff_key() 用于比较两个或多个数组的键名(key),并返回那些在第一个数组中存在但在其他数组中没有的键值对。

语法

array_diff_key(array $array1, array $array2, array ...$arrays): array

参数说明

  • $array1:第一个数组(参考数组)。

  • $array2, ...$arrays:要与第一个数组比较的数组。

示例

$array1 = [
    "a" => 1,
    "b" => 2,
    "c" => 3
];

$array2 = [
    "a" => 4,
    "c" => 5
];

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

输出结果

Array
(
    [b] => 2
)

在这个例子中,array_diff_key() 比较的是两个数组的键名。返回的结果是那些在 $array1 中有,但在 $array2 中没有的键值对。

2. array_diff_assoc() 函数

array_diff_assoc() 用于比较两个或多个数组的键名和值(key 和 value),返回那些在第一个数组中存在但在其他数组中没有的键值对。与 array_diff_key() 不同的是,它不仅比较键名,还比较键对应的值。

语法

array_diff_assoc(array $array1, array $array2, array ...$arrays): array

参数说明

  • $array1:第一个数组(参考数组)。

  • $array2, ...$arrays:要与第一个数组比较的数组。

示例

$array1 = [
    "a" => 1,
    "b" => 2,
    "c" => 3
];

$array2 = [
    "a" => 4,
    "c" => 3
];

$result = array_diff_assoc($array1, $array2);
print_r($result);

输出结果

Array
(
    [a] => 1
    [b] => 2
)

在这个例子中,array_diff_assoc() 比较了 $array1$array2 的键名和值。返回的结果是那些在 $array1 中有,但在 $array2 中没有完全相同的键名和值的键值对。

3. array_diff_key()array_diff_assoc() 之间的区别

键名 vs 键值

  • array_diff_key() 仅比较键名,忽略了键对应的值。

  • array_diff_assoc() 同时比较键名和值,只有键名和值都不相同才会被认为是不同。

使用场景

  • array_diff_key() 适用于当你只关心数组的键名,而不关心对应值的场景。例如,想要移除某些键,或者比较两个数组的结构。

  • array_diff_assoc() 适用于当你需要完全比较数组中的键和值时,常见的场景如过滤出在两个数组中键名和值都不相同的元素。

示例:URL 替换

假设我们有一个数组,里面包含了不同的 URL,并且需要进行替换。我们可以利用 array_diff_key()array_diff_assoc() 来实现替换,具体取决于是需要根据键还是键值来进行比较。

$urls = [
    "home" => "http://m66.net/home",
    "about" => "http://example.com/about",
    "contact" => "http://m66.net/contact"
];

$other_urls = [
    "home" => "http://m66.net/home",
    "about" => "http://m66.net/about",
];

$result = array_diff_key($urls, $other_urls);
print_r($result);

输出结果

Array
(
    [contact] => http://m66.net/contact
)

在这个例子中,我们仅根据键名来进行比较,最终找出了 $urls 中有但 $other_urls 中没有的项。

以上就是 array_diff_key()array_diff_assoc() 之间的区别。根据您的需求,选择合适的函数来处理数组的差异,可以有效提升代码的效率和可读性。