PHP array_uintersect 函数
最后修改于 2025 年 3 月 13 日
PHP array_uintersect 函数使用回调函数进行比较来计算数组的交集。它对于自定义比较逻辑非常有用。
基本定义
array_uintersect 函数使用回调比较数组值。它返回一个包含所有参数中都存在的数组。
语法:array_uintersect(array $array1, array $array2, ..., callable $value_compare_func): array。回调函数必须返回一个小于零、等于零或大于零的整数。
基本 array_uintersect 示例
这显示了带有不区分大小写比较的简单数组交集。
basic_array_uintersect.php
<?php declare(strict_types=1); $array1 = ["Apple", "Banana", "Cherry"]; $array2 = ["apple", "banana", "grape"]; $result = array_uintersect($array1, $array2, 'strcasecmp'); print_r($result);
这可以找到忽略大小写的共同元素。strcasecmp 回调执行不区分大小写的比较。 "Apple" 和 "Banana" 都匹配。
自定义对象比较
使用自定义属性比较对象的数组以进行交集。
object_comparison.php
<?php
declare(strict_types=1);
class Product {
public function __construct(
public string $name,
public float $price
) {}
}
$products1 = [
new Product("Laptop", 999.99),
new Product("Phone", 699.99)
];
$products2 = [
new Product("Laptop", 899.99),
new Product("Tablet", 399.99)
];
$result = array_uintersect($products1, $products2,
fn($a, $b) => strcmp($a->name, $b->name));
print_r($result);
这可以找到具有匹配名称的产品,忽略价格差异。回调比较每个 `Product` 对象的 `name`。
多个数组交集
通过自定义比较查找三个数组中的共同元素。
multiple_arrays.php
<?php
declare(strict_types=1);
$array1 = [10, 20, 30, 40];
$array2 = [15, 20, 25, 30];
$array3 = [20, 30, 35, 40];
$result = array_uintersect($array1, $array2, $array3,
fn($a, $b) => $a <=> $b);
print_r($result);
这可以找到存在于所有三个数组中的数字。飞船运算符回调执行标准的数字比较。只有 20 和 30 匹配。
复杂值比较
使用复杂的逻辑来比较数组元素以进行交集。
complex_comparison.php
<?php
declare(strict_types=1);
function compareLength($a, $b): int {
return strlen($a) <=> strlen($b);
}
$array1 = ["apple", "banana", "cherry"];
$array2 = ["pear", "kiwi", "orange"];
$result = array_uintersect($array1, $array2, 'compareLength');
print_r($result);
这可以找到数组之间长度匹配的字符串。回调比较字符串长度而不是值。"apple" (5) 匹配 "pear" (4) +1 差值。
区分大小写的字符串比较
执行精确的区分大小写的字符串匹配。
case_sensitive.php
<?php
declare(strict_types=1);
$array1 = ["PHP", "Python", "Java"];
$array2 = ["php", "python", "ruby"];
$result = array_uintersect($array1, $array2, 'strcmp');
print_r($result);
这显示了严格的区分大小写比较。strcmp 回调匹配精确的字符串。由于大小写差异,未找到匹配项。
最佳实践
- 一致的回调:确保回调返回正确的比较值。
- 类型安全:为健壮的比较逻辑添加类型提示。
- 性能:先对大型数据集进行排序。
- 可读性:为复杂的比较使用命名函数。
来源
本教程介绍了 PHP array_uintersect 函数,并通过实际示例展示了自定义数组交集场景。
作者
列出 所有 PHP 数组函数。