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

如何用json_encode将PHP嵌套数组转为外层数组内的JSON对象

解决PHP数组转JSON时将子索引数组转为对象的问题

你遇到的问题是因为PHP的json_encode()默认会把连续数字索引且从0开始的数组编码成JSON数组,而你需要把每个子数组转成JSON对象。这里有两种简单的解决方法:

方法1:将每个子数组强制转换为对象

在定义数组时,用(object)把每个子索引数组转为PHP对象,这样json_encode()就会把它们编码成JSON对象:

$myAssocArray = array(
    (object) ['fred','tyson',23],
    (object) ['collins', 'white', 54],
    (object) ['mary', 'frost', 46]
);

$jsonString = json_encode($myAssocArray);
echo $jsonString;

执行后输出的结果就是你期望的:

[{"0":"fred","1":"tyson","2":23},{"0":"collins","1":"white","2":54},{"0":"mary","1":"frost","2":46}]

方法2:使用JSON_FORCE_OBJECT选项(注意外层结构变化)

如果你想让所有数组都转为JSON对象,可以用JSON_FORCE_OBJECT参数,但这样外层的数组也会变成JSON对象(键为0、1、2):

$myAssocArray = array( ['fred','tyson',23], ['collins', 'white', 54], ['mary', 'frost', 46] );
$jsonString = json_encode($myAssocArray, JSON_FORCE_OBJECT);
echo $jsonString;

输出结果会是:

{"0":{"0":"fred","1":"tyson","2":23},"1":{"0":"collins","1":"white","2":54},"2":{"0":"mary","1":"frost","2":46}}

如果你的需求是外层保持数组、内层是对象,方法1是更合适的选择。

原理说明

PHP中,json_encode()会根据数组类型判断编码方式:

  • 当数组是「连续数字索引(从0开始)」时,编码为JSON数组
  • 当数组是「关联数组」或「PHP对象」时,编码为JSON对象

把子数组强制转为对象后,就会触发后者的编码逻辑,得到你想要的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:50:38