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_diff
与 array_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 数组函数。