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

PHP array_merge合并数组后json_encode输出对象格式解决方法

问题原因

array_merge 处理键名为数字(包含字符串格式的数字键)的数组时,会自动重置所有键名为从0开始递增的连续整数索引。此时生成的是连续索引数组,json_encode 默认会将这类数组编码为JSON数组格式(即你得到的[1,4,5]),无法输出键值对形式的JSON对象。
同时array_merge已经丢失了原数组的1、2、3键名,即使强制转对象,得到的键也会是重置后的0、1、2,不符合预期。

正确实现方法

要得到{"1":1,"2":4,"3":5}的输出,核心是合并数组时保留原有的数字键名,推荐以下写法:

  • 直接使用+运算符合并数组,该运算符不会重建数组索引,会保留原有键名:
<?php
$array = ["1" => 1, "2" =>4];
$array1 = ["3" => 5];
$temp = $array + $array1;
echo json_encode($temp);
?>

注意:+合并数组时,前面数组的同键名值会优先保留,不会被后面数组的同键名值覆盖。如果需要后面数组的同键名值覆盖前面的内容,可以使用array_replace函数,它同样不会重置数字键名:

$temp = array_replace($array, $array1);
  • 不推荐直接给json_encode传JSON_FORCE_OBJECT参数的写法,因为array_merge已经重置了键名,最终输出的键会是0、1、2,和你预期的键名不符:
// 该写法输出为{"0":1,"1":4,"2":5},不符合预期
echo json_encode($temp, JSON_FORCE_OBJECT);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:45:31