本文详解如何将两个结构相同的 json 数组(均为对象数组)按索引逐项合并,使每个对应位置的对象深度合并为一个新对象,并提供健壮、可复用的 php 实现方案。
在 PHP 开发中,常需将多个来源的 JSON 数据(如地理信息与业务属性)按逻辑顺序关联合并。典型场景是:一个数组包含农场基础信息($json1),另一个包含其运营属性($json2),二者元素一一对应(索引对齐),目标是生成单个增强型对象数组。
$json1 = '[{"CHEPTEL":"12001116","NOM":"La Ferme de Jean-Marc et Aurélien ","CODE_POSTAL":"12630","VILLE":"AGEN D AVEYRON","LATITUDE":"44.343518","LONGITUDE":"2.716004","DESCRIPTIF_FERME":""},{"CHEPTEL":"12001","NOM":"La Ferme ","CODE_POSTAL":"12630","VILLE":"AGEN D AVEYRON","LATITUDE":"44.343518","LONGITUDE":"2.716004","DESCRIPTIF_FERME":""}]';
$json2 = '[{"DEMA_CODE":"08-93","ANNEE_ADHESION":"2016","RACE_MERES":"Limousine","DESCRIPTIF_ATELIER":""},{"
DEMA_CODE":"08-93","ANNEE_ADHESION":"2016","RACE_MERES":"Limousine","DESCRIPTIF_ATELIER":""}]';
$data1 = json_decode($json1, true);
$data2 = json_decode($json2, true);$merged = [];
$length = min(count($data1), count($data2)); // 防止索引越界
for ($i = 0; $i < $length; $i++) {
$merged[] = array_merge($data1[$i], $data2[$i]);
}
// 转回 JSON(可选)
$resultJson = json_encode($merged, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $resultJson;⚠️ 注意:原始答案中 $json1 和 $json2 被误当作已解码数组直接使用。实际必须先 json_decode(),否则会报错 Invalid argument supplied for foreach()。
if (!is_array($data1) || !is_array($data2)) {
throw new InvalidArgumentException('Invalid JSON input: must decode to arrays');
}
if (count($data1) !== count($data2)) {
error_log("Warning: Array lengths differ ({$data1} vs {$data2}). Merging only " . min(count($data1), count($data2)) . " items.");
}
$merged = [];
foreach ($data1 as $index => $item) {
if (isset($data2[$index]) && is_array($data2[$index])) {
$merged[$index] = array_merge($item, $data2[$index]);
} else {
$merged[$index] = $item; // 仅保留主数据
}
}$merged = array_map(fn($a, $b) => array_merge($a, $b), $data1, $data2);
通过以上方法,你可高效、安全地完成二维 JSON 数组的索引级合并,适用于 API 数据聚合、报表生成等典型后端场景。
# php
# js
# git
# json
# 编码
# 后端
# 中文乱码
# 数据丢失
# 关联数组
# for
# foreach
# 字符串
# 递归
# 循环
# 对象
# 若需
# 多个
# 遍历
# 均为
# 适用于
# 第二个
# 你可
# 可选
# 报错
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
php串口通信波特率怎么选_根据硬件手册设置正确波特率【方法】
windows 10应用商店区域怎么改_windows 10微软商店切换地区方法
Python文件和流处理指南_高效读写大体积数据文件
如何在Golang中使用闭包_封装变量与函数作用域
Python实现图数据库操作_Neo4j核心CRUD与图算法解析
Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键
c++中的Tag Dispatching是什么_c++利用标签分发优化函数重载【元编程】
MAC怎么截图并快速编辑_MAC自带截图快捷键与标注工具使用【方法】
Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
PHP主流架构如何处理会话管理_Session与Cookie【技巧】
Win10怎样卸载自带Edge_Win10卸载Edge浏览器步骤【教程】
Python 中将 ISO 8601 时间戳转换为日期并计算日期差值的完整教程
海外搜索引擎推广效果怎么样,怎么分析效果!
LINUX如何查看文件类型_Linux中file命令的识别与应用
Win11如何添加/删除输入法 Win11切换中英文输入法快捷键【设置】
php删除数据怎么加限制_带where条件删除避免全删【指南】
Mac如何调整Dock栏大小和位置_Mac程序坞个性化设置
Win11怎么设置屏保时间_调整Win11屏幕保护等待时间【详解】
Mac的“调度中心”与“空间”怎么用_Mac多桌面高效管理【技巧】
Python对象比较与排序_集合使用说明【指导】
Win11讲述人怎么关闭_Win11误触开启语音朗读关闭【快捷键】
如何使用Golang benchmark测量函数延迟_统计执行耗时
微信企业付款回调PHP怎么接收_处理企业付款异步通知数据教程【教程】
为什么Go建议使用error接口作为错误返回_Go Error接口设计原因说明
Windows 11如何开启文件夹加密(EFS)_Windows 11文件属性中加密内容以保护数据
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Python函数接口文档化_自动化说明【指导】
php怎么下载安装后设置错误日志_phpini log配置教程【汇总】
如何使用Golang指针与接口结合_实现方法调用和动态类型
php转mp4怎么设置帧率_调整php生成mp4视频帧率说明【说明】
如何在Golang中编写异步函数测试_Golang异步操作测试策略
VSC怎样在Linux运行PHP_Ubuntu系统配置步骤【操作】
Python数据挖掘核心算法实践_聚类分类与特征工程
Python面向对象实战讲解_类与设计模式深入理解
Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】
Windows10怎样设置家长控制_Windows10家长控制设置方法【指南】
如何在Golang中实现CI/CD流水线自动化测试_Golang持续集成测试执行方法
c++ atoi和atof函数用法_c++字符数组转数字
php中$this和::能混用吗_对象与静态作用域冲突解决【方法】
php8.4如何配置ssl证书_php8.4https访问配置指南【教程】
Mac的Time Machine怎么用_Mac系统备份与数据恢复【完整指南】
Python异步编程高级项目教程_asyncio协程任务管理实战
如何在Golang中理解指针比较_Golang地址比较与相等判断
如何使用Golang管理模块版本_Golanggo mod tidy与升级方法
Win11怎么设置快速访问主页_Windows11资源管理器文件夹选项
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
如何使用Golang捕获并记录协程panic_保证主程序稳定运行
Win10怎样卸载iTunes_Win10卸载iTunes步骤【步骤】
Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系统【安全指南】
2025-12-31
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。