PHP合并不同键数的关联数组并保留所有键(含空值)
合并键数量不同的关联数组并保留所有键
要实现保留所有键的合并效果,你需要先统一两个数组中所有子数组的键结构(补充缺失的键并设为null),再进行合并。array_merge无法直接做到这一点,因为它只会合并数组元素,不会自动补充缺失的键。
具体实现步骤:
- 收集所有出现过的键:提取两个数组中所有子数组的键,去重后得到完整的键集合。
- 标准化每个子数组:为每个子数组补充缺失的键,缺失键的值设为
null。 - 合并标准化后的数组:将处理后的两个数组合并,得到最终结果。
代码示例:
$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
相关产品推荐
相关产品推荐

