PHP合并JSON字符串需先json_decode($json, true)转关联数组,再据类型选+或array_merge():关联数组用+或array_merge()(后者覆盖),索引数组必用array_merge(),深度合并需递归函数,并校验解码是否成功。

PHP中把两个 JSON 字符串解码后合并成一个数组,核心是先用 json_decode() 转为 PHP 数组(注意传 true 得到关联数组),再用数组合并操作。关键在于区分「索引数组」和「关联数组」的合并方式。
1. 两个都是关联数组(JSON 对象)→ 用 + 或 array_merge()
如果两个 JSON 字符串都表示对象(如 {"a":1,"b":2} 和 {"b":3,"c":4}),解码后是关联数组:
$json1 = '{"a":1,"b":2}';
$json2 = '{"b":3,"c":4}';
$arr1 = json_decode($json1, true);
$arr2 = json_decode($json2, true);
// 方法一:+ 合并(后者覆盖前者同名键)
$result = $arr1 + $arr2; // ['a'=>1, 'b'=>3, 'c'=>4]
// 方法二:array_merge()(同样后者覆盖前者)
$result = array_merge($arr1, $arr2); // 效果同上
2. 两个都是索引数组(JSON 数组)→ 用 array_merge()
如果 JSON 是数组格式(如 [1,2] 和 [3,4]),解码后是数字索引数组,必须用 array_merge(),不能用 +(会保留原键不重排):
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
$json1 = '[1,2]'; $json2 = '[3,4]'; $arr1 = json_decode($json1, true); $arr2 = json_decode($json2, true); $result = array_merge($arr1, $arr2); // [1,2,3,4] // ❌ $arr1 + $arr2 → [0=>1, 1=>2]($arr2 被忽略,因键冲突)
3. 混合类型或需深度合并 → 用递归函数或第三方库
若 JSON 结构嵌套较深,且希望合并子数组而非简单覆盖(比如 {"user":{"name":"A"}} 和 {"user":{"age":25}} 合并成 {"user":{"name":"A","age":25}}),需递归合并:
立即学习“PHP免费学习笔记(深入)”;
function array_merge_recursive_distinct(array &$arr1, array &$arr2) {
$merged = $arr1;
foreach ($arr2 as $key => &$value) {
if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) {
$merged[$key] = array_merge_recursive_distinct($merged[$key], $value);
} else {
$merged[$key] = $value;
}
}
return $merged;
}
$json1 = '{"user":{"name":"Alice"}}';
$json2 = '{"user":{"age":30},"status":"active"}';
$arr1 = json_decode($json1, true);
$arr2 = json_decode($json2, true);
$result = array_merge_recursive_distinct($arr1, $arr2);
// → ["user"=>["name"=>"Alice","age"=>30], "status"=>"active"]
4. 安全处理:检查解码是否成功
务必校验 json_decode() 返回值,避免 null 导致后续报错:
$json1 = '{"a":1}';
$json2 = '{"b":2}';
$arr1 = json_decode($json1, true);
$arr2 = json_decode($json2, true);
if ($arr1 === null || $arr2 === null) {
throw new InvalidArgumentException('JSON 解码失败:' . json_last_error_msg());
}
$result = array_merge($arr1, $arr2);


















