ZetCode

PHP array_diff_assoc 函数

最后修改于 2025 年 3 月 13 日

PHP 的 array_diff_assoc 函数会比较数组,并返回键值对均有差异的结果。它在查找键和值均不匹配的情况时非常有用。

基本定义

array_diff_assoc 函数会比较数组并返回差异。与 array_diff 不同,它会同时检查键和值。

语法:array_diff_assoc(array $array1, array $array2, ...): array。它返回 $array1 中不存在于其他数组中的元素。比较是严格的(===)。

基本的 array_diff_assoc 示例

这展示了两个数组在键和值检查方面的简单比较。

basic_array_diff_assoc.php
<?php

$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["a" => "apple", "b" => "blueberry", "c" => "cherry"];

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

print_r($result);

这会比较两个数组并找出差异。输出将是:Array ( [b] => banana ),因为两个数组中键 "b" 的值不同。

比较多个数组

array_diff_assoc 可以同时比较两个以上的数组。

multiple_arrays.php
<?php

$array1 = ["a" => "apple", "b" => "banana", "c" => "cherry"];
$array2 = ["a" => "apple", "b" => "banana"];
$array3 = ["a" => "apple", "c" => "cherry"];

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

print_r($result);

这会比较三个数组。输出将为空,因为 $array1 中的所有元素都存在于其他数组中的至少一个数组中,且键/值相同。

数值键比较

该函数对数字键和字符串键的使用方式相同。

numeric_keys.php
<?php

$array1 = [1 => "one", 2 => "two", 3 => "three"];
$array2 = [1 => "one", 2 => "TWO", 4 => "four"];

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

print_r($result);

这会比较带有数字键的数组。输出将是:Array ( [2] => two [3] => three ),因为键 2 的值不同,而键 3 在 $array2 中不存在。

区分类型比较

array_diff_assoc 对键和值都使用严格比较(===)。

type_sensitive.php
<?php

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

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

print_r($result);

这演示了严格比较。输出将是:Array ( [a] => 1 [c] => 3.0 ),因为 "1"(字符串)!== 1(整数),而 3.0(浮点数)!== 3(整数)。

复杂数组比较

该函数可以处理带有嵌套结构的复杂数组。

complex_arrays.php
<?php

$array1 = [
    "fruit" => ["a" => "apple", "b" => "banana"],
    "color" => "red"
];
$array2 = [
    "fruit" => ["a" => "apple", "b" => "blueberry"],
    "color" => "red"
];

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

print_r($result);

这会比较多维数组。输出将为空,因为该函数不会递归比较嵌套数组。只检测顶层差异。

最佳实践

来源

PHP array_diff_assoc 文档

本教程介绍了 PHP 的 array_diff_assoc 函数,并通过实际示例展示了其在数组比较场景中的用法。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 数组函数