ZetCode

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 array_uintersect 函数,并通过实际示例展示了自定义数组交集场景。

作者

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

列出 所有 PHP 数组函数