ZetCode

PHP array_diff_ukey 函数

最后修改于 2025 年 3 月 13 日

PHP 的 array_diff_ukey 函数使用回调函数比较数组键。它根据键的比较返回数组之间的差异。

基本定义

array_diff_ukey 函数通过键计算数组的差异。它使用用户提供的回调函数来比较键。

语法:array_diff_ukey(array $array1, array $array2, ..., callable $key_compare_func): array。回调应返回一个小于零、等于零或大于零的整数。

基本的 array_diff_ukey 示例

此示例展示了使用回调对两个数组进行简单的键比较。

basic_array_diff_ukey.php
<?php

function keyCompare($key1, $key2) {
    return strcasecmp($key1, $key2);
}

$array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['A' => 4, 'B' => 5];

$result = array_diff_ukey($array1, $array2, 'keyCompare');

print_r($result); 

回调执行不区分大小写的比较。忽略大小写时,只有键 'c' 存在于 $array1 中而不在 $array2 中。

比较数字键

此示例演示了使用自定义逻辑比较数字键。

numeric_keys.php
<?php

function numericCompare($key1, $key2) {
    return $key1 <=> $key2;
}

$array1 = [10 => 'a', 20 => 'b', 30 => 'c'];
$array2 = [15 => 'd', 20 => 'e'];

$result = array_diff_ukey($array1, $array2, 'numericCompare');

print_r($result); 

回调使用宇宙飞船运算符进行数字比较。键 10 和 30 只存在于第一个数组中,因此它们会出现在结果中。

多个数组比较

使用自定义键比较将一个数组与多个数组进行比较。

multiple_arrays.php
<?php

function lengthCompare($key1, $key2) {
    return strlen($key1) <=> strlen($key2);
}

$array1 = ['apple' => 1, 'banana' => 2, 'cherry' => 3];
$array2 = ['pear' => 4];
$array3 = ['kiwi' => 5, 'orange' => 6];

$result = array_diff_ukey($array1, $array2, $array3, 'lengthCompare');

print_r($result); 

回调按长度比较键。只有 'banana' 和 'cherry' 具有在其他数组中找不到的唯一长度。

对象键比较

使用自定义比较函数比较具有对象键的数组。

object_keys.php
<?php

class ProductKey {
    public function __construct(public string $id) {}
}

function productCompare($key1, $key2) {
    return strcmp($key1->id, $key2->id);
}

$key1 = new ProductKey('p1');
$key2 = new ProductKey('p2');
$key3 = new ProductKey('p3');

$array1 = [$key1 => 'Laptop', $key2 => 'Phone'];
$array2 = [$key3 => 'Tablet'];

$result = array_diff_ukey($array1, $array2, 'productCompare');

print_r($result); 

回调比较对象属性。基于 id 属性值的不同,$array1 中的两个键都与 $array2 的键不同。

区分大小写的字符串比较

对数组执行区分大小写的键比较。

case_sensitive.php
<?php

function caseSensitiveCompare($key1, $key2) {
    return strcmp($key1, $key2);
}

$array1 = ['Name' => 'John', 'Age' => 30];
$array2 = ['name' => 'Jane', 'age' => 25];

$result = array_diff_ukey($array1, $array2, 'caseSensitiveCompare');

print_r($result); 

回调执行区分大小写的比较。由于大小写不同,所有键都不同,因此返回 $array1 中的所有元素。

最佳实践

来源

PHP array_diff_ukey 文档

本教程涵盖了 PHP 的 array_diff_ukey 函数,并通过实际示例展示了其在各种键比较场景中的用法。

作者

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

列出 所有 PHP 数组函数