array_intersect_key() 保留第一个数组中键存在于所有其他数组的元素,值取自第一个数组;支持多参数,数字键按值匹配而非位置。

用 array_intersect_key() 就行,它专门保留第一个数组中那些键在其他数组里也存在的元素。
只保留两个数组都有的键(值用第一个数组的)
这是最常用的情况:
$a = ['name' => 'Alice', 'age' => 25, 'city' => 'Beijing']; $b = ['name' => 'Bob', 'age' => 30, 'country' => 'China']; $result = array_intersect_key($a, $b); // 结果:['name' => 'Alice', 'age' => 25]
- 键必须完全相同(字符串匹配,区分大小写)
- 值来自第一个参数数组(
$a),不合并也不覆盖 - 不关心值是否相等,只看键是否存在
想用第二个数组的值?手动配合 array_keys()
如果要保留共有键,但取的是第二个数组的值,可以这样:
$common_keys = array_keys(array_intersect_key($a, $b)); $result = array_intersect_key($b, array_flip($common_keys)); // 或更直接: $result = array_intersect_key($b, $a); // 注意顺序调换
-
array_intersect_key($b, $a)效果一样,只是值来自$b - 本质是交换两个参数的位置
需要同时校验多个数组的共有键?支持多参数
该函数可接受任意多个数组,只保留所有数组都含有的键:
$a = ['x' => 1, 'y' => 2, 'z' => 3]; $b = ['x' => 10, 'y' => 20, 'w' => 40]; $c = ['x' => 100, 'y' => 200, 'v' => 500]; $result = array_intersect_key($a, $b, $c); // 结果:['x' => 1, 'y' => 2]
- 只要有一个数组没有某个键,这个键就会被过滤掉
- 值始终取自第一个数组(
$a)
注意:关联数组 vs 索引数组
对数字键要小心,默认行为可能不符合直觉:
- 索引数组(纯数字键)也能用,但会按键值匹配,不是按位置
- 例如:
[0=>'a', 1=>'b']和[1=>'x', 2=>'y']的交集是[1=>'b'] - 如果想按顺序取共有的“位置”,得用
array_intersect()或循环判断
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











