PHP array_udiff 函数
最后修改于 2025 年 3 月 13 日
PHP array_udiff 函数使用回调函数进行数据比较来计算数组之间的差集。它对于自定义比较非常有用。
基本定义
array_udiff 函数使用回调函数比较数组值。它返回第一个数组中不存在于其他数组中的值。
语法:array_udiff(array $array1, array $array2, ..., callable $value_compare_func): array。回调函数必须返回一个小于零、等于零或大于零的整数。
基本的 array_udiff 示例
这显示了一个使用回调函数比较包含数字的数组的简单示例。
basic_array_udiff.php
<?php
declare(strict_types=1);
function compareNumbers(int $a, int $b): int {
return $a <=> $b;
}
$array1 = [1, 2, 3, 4, 5];
$array2 = [3, 4, 5, 6, 7];
$result = array_udiff($array1, $array2, 'compareNumbers');
print_r($result);
这会找出 $array1 中不存在于 $array2 中的元素。回调函数使用 spaceship 运算符进行比较。结果包含值 1 和 2。
比较对象
根据特定的对象属性比较对象数组。
object_comparison.php
<?php
declare(strict_types=1);
class Product {
public function __construct(
public string $name,
public float $price
) {}
}
function compareProducts(Product $a, Product $b): int {
return $a->price <=> $b->price;
}
$products1 = [
new Product("Laptop", 999.99),
new Product("Phone", 699.99),
new Product("Tablet", 399.99)
];
$products2 = [
new Product("Monitor", 299.99),
new Product("Keyboard", 99.99),
new Product("Phone", 699.99)
];
$result = array_udiff($products1, $products2, 'compareProducts');
foreach ($result as $product) {
echo $product->name . "\n";
}
这会按价格比较产品。回调函数会检查 price 属性。返回第一个数组中价格唯一的那些产品。
不区分大小写的字符串比较
对字符串数组执行不区分大小写的比较。
case_insensitive.php
<?php
declare(strict_types=1);
function compareStrings(string $a, string $b): int {
return strcasecmp($a, $b);
}
$array1 = ["Apple", "Banana", "Cherry"];
$array2 = ["apple", "banana", "grape"];
$result = array_udiff($array1, $array2, 'compareStrings');
print_r($result);
这会忽略大小写比较字符串。回调函数使用 strcasecmp。只有 "Cherry" 是不同的,因为其他字符串在不区分大小写的情况下匹配。
多维数组比较
根据特定元素比较多维数组。
multi_dimensional.php
<?php
declare(strict_types=1);
function compareArrays(array $a, array $b): int {
return $a['id'] <=> $b['id'];
}
$users1 = [
['id' => 1, 'name' => 'Alice'],
['id' => 2, 'name' => 'Bob'],
['id' => 3, 'name' => 'Charlie']
];
$users2 = [
['id' => 2, 'name' => 'Robert'],
['id' => 4, 'name' => 'David']
];
$result = array_udiff($users1, $users2, 'compareArrays');
print_r($result); // Outputs users with IDs 1 and 3
这会根据 'id' 元素比较数组。回调函数会检查 id 键。返回第一个数组中 ID 唯一的那些用户。
多个数组比较
同时将一个数组与多个其他数组进行比较。
multiple_arrays.php
<?php
declare(strict_types=1);
function compareValues($a, $b): int {
if (is_numeric($a) && is_numeric($b)) {
return $a <=> $b;
}
return strcmp((string)$a, (string)$b);
}
$mainArray = [1, 'apple', 3.14, true, 'orange'];
$array2 = [1, 3.14];
$array3 = ['apple', 'banana'];
$result = array_udiff($mainArray, $array2, $array3, 'compareValues');
print_r($result);
这会与包含混合类型的多个数组进行比较。回调函数同时处理数值和字符串比较。只保留唯一的值。
最佳实践
- 一致的回调:确保回调返回一致的比较结果。
- 类型安全:在可能的情况下,为回调参数添加类型提示。
- 性能:对于大型数组,请优化回调函数。
- 可读性:为回调函数使用描述性的名称。
来源
本教程介绍了 PHP array_udiff 函数,并通过实际示例展示了它在各种比较场景中的用法。
作者
列出 所有 PHP 数组函数。