ZetCode

PHP array_intersect_key 函数

最后修改于 2025 年 3 月 13 日

PHP 的 array_intersect_key 函数使用键进行比较来计算数组的交集。它返回一个数组,其中包含第一个数组中所有键存在于所有参数中的条目。

基本定义

array_intersect_key 函数比较数组键,并从第一个数组返回匹配的键值对。它保留了原始的键值关联。

语法:array_intersect_key(array $array1, array ...$arrays): array。该函数接受多个数组,但仅比较键,不比较值。

array_intersect_key 基础示例

这演示了基于键的两个数组之间的简单交集。

basic_array_intersect_key.php
<?php

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

$result = array_intersect_key($array1, $array2);

print_r($result);

该函数返回 $array1 中键存在于 $array2 中的元素。请注意,保留的是 $array1 的值,而不是 $array2 的值。

多个数组交集

此示例显示了基于键的三个数组之间的交集。

multiple_array_intersect.php
<?php

$array1 = ['red' => '#FF0000', 'green' => '#00FF00', 'blue' => '#0000FF'];
$array2 = ['red' => 'Rouge', 'blue' => 'Bleu', 'yellow' => 'Jaune'];
$array3 = ['red' => '赤', 'blue' => '青', 'black' => '黒'];

$result = array_intersect_key($array1, $array2, $array3);

print_r($result);

仅返回所有三个数组中都存在的键('red' 和 'blue')。这些值来自参数列表中的第一个数组($array1)。

数字键交集

此示例演示了使用数字数组键的交集。

numeric_key_intersect.php
<?php

$array1 = [10 => 'A', 20 => 'B', 30 => 'C'];
$array2 = [20 => 'X', 30 => 'Y', 40 => 'Z'];

$result = array_intersect_key($array1, $array2);

print_r($result);

该函数与数字键和字符串键的工作方式相同。只有键为 20 和 30 的元素才会同时出现在两个数组中。

保留第一个数组的值

此示例重点说明值始终来自第一个数组。

value_preservation.php
<?php

$userData = ['name' => 'Alice', 'age' => 25, 'email' => 'alice@example.com'];
$allowedFields = ['name' => true, 'email' => true];

$filteredData = array_intersect_key($userData, $allowedFields);

print_r($filteredData);

这是过滤数据的常见用例。仅保留 $allowedFields 中列出的字段,并保留来自 $userData 的值。

空结果示例

这显示了当数组之间没有匹配的键时会发生什么。

no_intersection.php
<?php

$weekdays = ['Mon' => 'Monday', 'Tue' => 'Tuesday'];
$weekend = ['Sat' => 'Saturday', 'Sun' => 'Sunday'];

$result = array_intersect_key($weekdays, $weekend);

print_r($result);

当数组之间没有匹配的键时,将返回一个空数组。这对于需要验证不存在重叠的情况很有用。

最佳实践

来源

PHP array_intersect_key 文档

本教程通过实际示例介绍了 PHP 的 array_intersect_key 函数,展示了它在数组键交集场景中的用法。

作者

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

列出 所有 PHP 数组函数