ZetCode

PHP array_diff 函数

最后修改于 2025 年 3 月 13 日

PHP array_diff 函数比较数组并返回差异。它有助于查找存在于一个数组但不存在于其他数组中的值。

基本定义

array_diff 函数比较数组值,并返回一个新数组,其中包含第一个数组中不存在于其他数组中的条目。

语法:array_diff(array $array, array ...$arrays): array。它使用松散比较 (==) 来比较值。键会在结果中保留。

基本的 array_diff 示例

这显示了两个数组之间的简单比较,以查找唯一值。

basic_array_diff.php
<?php

$array1 = ["a", "b", "c", "d"];
$array2 = ["b", "c", "e"];

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

print_r($result);
// Output: Array ( [0] => a [3] => d )

这会查找 $array1 中不存在于 $array2 的值。结果包含“a”和“d”,其原始索引从 $array1 保留。

比较多个数组

array_diff 可以一次与多个数组进行比较。

multi_array_diff.php
<?php

$mainArray = [1, 2, 3, 4, 5, 6];
$arrayA = [2, 4];
$arrayB = [3, 5];

$result = array_diff($mainArray, $arrayA, $arrayB);

print_r($result);
// Output: Array ( [0] => 1 [5] => 6 )

这会查找 $mainArray 中不存在于 $arrayA 或 $arrayB 的值。结果包含 1 和 6,这是 $mainArray 中唯一的数字。

关联数组比较

array_diff 可与关联数组配合使用,仅比较值。

assoc_array_diff.php
<?php

$user1 = ["name" => "John", "age" => 30, "city" => "New York"];
$user2 = ["name" => "Jane", "age" => 25, "city" => "New York"];

$result = array_diff($user1, $user2);

print_r($result);
// Output: Array ( [name] => John [age] => 30 )

这会按值比较关联数组。结果显示了 name 和 age 字段的差异。city 值相同,因此从结果中排除。

使用 array_diff 进行严格比较

对于严格比较 (===),请将 array_diffarray_udiff 结合使用。

strict_array_diff.php
<?php

$array1 = ["1", 2, 3];
$array2 = [1, 2, "3"];

// Regular array_diff (loose comparison)
$looseDiff = array_diff($array1, $array2);

// Strict comparison
$strictDiff = array_udiff($array1, $array2, function($a, $b) {
    return $a === $b ? 0 : 1;
});

print_r($looseDiff);   // Output: Array ( )
print_r($strictDiff);  // Output: Array ( [0] => 1 [2] => 3 )

这演示了松散比较和严格比较之间的区别。常规的 array_diff 找不到任何差异,而严格版本则由于字符串“1”和整数 1 之间的类型差异而找到差异。

查找更新数据中的新项目

实际示例:与原始数据集相比,在更新的数据集中查找新项目。

practical_array_diff.php
<?php

$originalProducts = ["Laptop", "Phone", "Tablet"];
$updatedProducts = ["Laptop", "Phone", "Tablet", "Watch", "Headphones"];

$newProducts = array_diff($updatedProducts, $originalProducts);

print_r($newProducts);
// Output: Array ( [3] => Watch [4] => Headphones )

这会识别添加到库存中的新产品。结果包含“Watch”和“Headphones”,它们不在原始产品列表中。

最佳实践

来源

PHP array_diff 文档

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

作者

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

列出 所有 PHP 数组函数