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

PHP如何将多单键值对数组转为无索引单个JSON对象?

解决PHP数组转单个JSON对象的问题

嘿,别担心,这个问题其实很好搞定!你现在的核心问题不是json_encode()的参数用错了,而是原始数组的结构需要先调整——你目前的数组是由多个独立的单键数组组成的索引数组,直接编码肯定会得到JSON数组而非单个对象,哪怕加了JSON_FORCE_OBJECT也只会给每个元素加上数字索引,完全不是你想要的结果。

解决方案:先合并数组,再编码

我们需要先把这些分散的单键数组合并成一个单一的关联数组,再用json_encode()处理就会得到你想要的单个JSON对象了。给你两种常用的合并方法:

方法1:用call_user_func_array + array_merge

这是最简洁的写法,直接把所有子数组合并成一个大数组:

// 你的原始数组
$originalArray = [
    ["name"=>"Dean"],
    ["last_name"=>"Don"],
    ["age"=>31],
    ["height"=>181]
];

// 合并所有子数组
$mergedArray = call_user_func_array('array_merge', $originalArray);

// 编码成JSON
$jsonResult = json_encode($mergedArray);

执行后$jsonResult的结果就是:

{ "name":"Dean", "last_name":"Don", "age":31, "height":181 }

方法2:用array_reduce循环合并

如果想更直观地控制合并过程,可以用array_reduce遍历数组并逐个合并:

$originalArray = [
    ["name"=>"Dean"],
    ["last_name"=>"Don"],
    ["age"=>31],
    ["height"=>181]
];

$mergedArray = array_reduce($originalArray, function($carry, $item) {
    return array_merge($carry, $item);
}, []);

$jsonResult = json_encode($mergedArray);

这个方法和上面的效果完全一样,只是写法更灵活,适合需要额外处理合并逻辑的场景。

为什么之前的方法不行?

  • 直接用json_encode($originalArray):因为原始数组是索引数组,所以会被编码成JSON数组,里面包含多个独立的小对象。
  • 用json_encode($originalArray, JSON_FORCE_OBJECT):这个参数只是把索引数组强制转成带数字键的JSON对象,结果会是{"0":{"name":"Dean"},"1":{"last_name":"Don"},...},显然不符合你的需求。

小提醒

如果你的原始数组里存在重复的键名,后面的子数组会覆盖前面的键值,这个需要注意哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:40:58