You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP合并不同键数的关联数组并保留所有键(含空值)

合并键数量不同的关联数组并保留所有键

要实现保留所有键的合并效果,你需要先统一两个数组中所有子数组的键结构(补充缺失的键并设为null),再进行合并。array_merge无法直接做到这一点,因为它只会合并数组元素,不会自动补充缺失的键。

具体实现步骤:

  1. 收集所有出现过的键:提取两个数组中所有子数组的键,去重后得到完整的键集合。
  2. 标准化每个子数组:为每个子数组补充缺失的键,缺失键的值设为null。
  3. 合并标准化后的数组:将处理后的两个数组合并,得到最终结果。

代码示例:

$array1 = array(
    array("email" => "user1@mail", "login" => "user1", "phone" => "123", "color" => "red"),
    array("email" => "user2@mail", "login" => "user2", "phone" => "456", "color" => "blue"),
);

$array2 = array(
    array("email" => "user3@mail", "login" => "user3"),
    array("email" => "user4@mail", "login" => "user4"),
);

// 1. 获取所有唯一键
$allKeys = array_unique(array_merge(
    ...array_map(fn($item) => array_keys($item), array_merge($array1, $array2))
));

// 2. 标准化子数组:补充缺失的键并设为null
$normalize = fn($item) => array_replace(array_fill_keys($allKeys, null), $item);

// 3. 处理两个数组并合并
$normalizedArray1 = array_map($normalize, $array1);
$normalizedArray2 = array_map($normalize, $array2);
$arrayMerge = array_merge($normalizedArray1, $normalizedArray2);

// 输出结果
print_r($arrayMerge);

代码说明:

  • array_map(fn($item) => array_keys($item), ...):提取每个子数组的键。
  • array_unique:去除重复的键,得到完整的键集合。
  • array_fill_keys($allKeys, null):生成包含所有键、值为null的基础数组。
  • array_replace:用原数组的已有值覆盖基础数组的null,保留原数据同时补充缺失键。

内容的提问来源于stack exchange,提问作者Jalagui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:18:16