PHP中可依数组键匹配合并值,常用方法有:1. array_intersect_key($array2, $array1)提取共键元素;2. array_map+array_keys构建指定顺序新数组;3. foreach显式控制逻辑并支持自定义处理。

PHP中可以根据一个数组的键去匹配并合并另一个数组的值,核心思路是:用第一个数组的键作为“索引模板”,从第二个数组中提取对应键的值(若存在),组合成新数组。这常用于字段映射、数据筛选或结构重组。
使用 array_intersect_key() 快速提取匹配项
如果目标是“只保留第二个数组中键名与第一个数组键名相同的元素”,这是最简洁的方式:
- array_intersect_key($array2, $array1) 会以 $array1 的键为基准,返回 $array2 中键名存在于 $array1 中的所有键值对。
- 结果数组的键和值都来自 $array2,顺序保持 $array2 原有顺序(PHP 8.0+ 保证键序)。
示例:
$keys = ['name', 'age', 'city']; $source = ['name' => '张三', 'email' => 'z@x.com', 'age' => 28, 'phone' => '138...']; $result = array_intersect_key($source, array_flip($keys)); // 结果:['name' => '张三', 'age' => 28]
用 array_map() + array_keys() 构建新结构
若需严格按第一个数组的键顺序生成结果(包括键存在但 $array2 中无对应值的情况),可结合 array_map 和 array_key_exists:
- 遍历 $array1 的键(array_keys($array1));
- 对每个键 $k,检查 $array2 是否含该键,有则取值,否则设为 null 或默认值。
示例:
$keys = ['name', 'age', 'city'];
$source = ['name' => '李四', 'age' => 30];
$result = array_map(function($k) use ($source) {
return $source[$k] ?? null;
}, array_keys($keys));
// 结果:[0 => '李四', 1 => 30, 2 => null] —— 注意键是数字索引
// 若需保持关联键:array_combine($keys, $result)
用 foreach 显式控制逻辑(推荐用于复杂场景)
当需要自定义默认值、类型转换、条件过滤或调试时,显式循环最清晰可控:
- 遍历 $array1 的键(foreach (array_keys($array1) as $k));
- 用 isset($array2[$k]) 或 array_key_exists($k, $array2) 判断存在性;
- 赋值时可加处理,如 trim()、intval() 或 fallback 到配置项。
示例:
$keys = ['name', 'age', 'city'];
$source = ['name' => ' 王五 ', 'status' => 'active'];
$result = [];
foreach ($keys as $k) {
$result[$k] = $source[$k] ?? '未知';
}
// 结果:['name' => ' 王五 ', 'age' => '未知', 'city' => '未知']
注意键名类型与大小写敏感性
PHP 数组键区分大小写且对类型敏感:
- 'Name' 和 'name' 是不同键;
- 整数 1 和字符串 '1' 在作为键时等价(PHP 自动转换),但显式声明时建议统一类型;
- 若需忽略大小写匹配,可先将两个数组的键转为小写再映射(如用 array_change_key_case() 预处理)。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











