PHP中合并两个多维JSON字符串数据失败,求解决方案
解决PHP中多维JSON数据合并的问题
嘿,我来帮你搞定把json_B的内容合并到json_A里的需求!从你的示例来看,咱们需要根据date字段匹配,把对应项的p数组合并到一起,对吧?下面是具体的实现步骤和代码:
步骤1:将JSON字符串转为PHP关联数组
首先得把JSON字符串转换成PHP能操作的数组,用json_decode()函数,记得把第二个参数设为true,这样会得到关联数组而不是对象:
// 你的两个JSON字符串 $jsonA = '{ "data": [ { "date": "2018032012", "p": [ { "lon": -7.777, "lat": 66.666, "precip-intensity": 0.0625, "wind-dir": 256.50015, "temperature": 5.5065155, "wind-speed": 9.045654, "weather-symbol": 3, "pressure-sealevel": 102366.94 } ] } ] }'; $jsonB = '{ "data": [ { "date": "2018032012", "p": [ { "lon": -8.888, "lat": 99.999, "precip-intensity": 0.0625, "wind-dir": 256.50015, "temperature": 5.5065155, "wind-speed": 9.045654, "weather-symbol": 3, "pressure-sealevel": 102366.94 } ] } ] }'; // 转成关联数组 $arrayA = json_decode($jsonA, true); $arrayB = json_decode($jsonB, true);
步骤2:根据date匹配合并p数组
接下来咱们要遍历其中一个数组(比如$arrayB的data),检查每个项的date是否在$arrayA的data中存在:
- 如果存在,就把两个项的
p数组合并 - 如果不存在,就把整个项添加到$arrayA的data里
// 先把$arrayA的data转成以date为键的数组,方便快速查找 $aDataMap = []; foreach ($arrayA['data'] as $item) { $aDataMap[$item['date']] = $item; } // 遍历$arrayB的data foreach ($arrayB['data'] as $bItem) { $date = $bItem['date']; if (isset($aDataMap[$date])) { // date已存在,合并p数组 $aDataMap[$date]['p'] = array_merge($aDataMap[$date]['p'], $bItem['p']); } else { // date不存在,直接添加 $aDataMap[$date] = $bItem; } } // 把$aDataMap转回到原来的数组结构 $arrayA['data'] = array_values($aDataMap);
步骤3:将合并后的数组转回JSON字符串
最后用json_encode()把合并好的数组转成JSON,想要格式化输出的话可以加JSON_PRETTY_PRINT参数:
$mergedJson = json_encode($arrayA, JSON_PRETTY_PRINT); echo $mergedJson;
最终效果
运行上面的代码后,你会得到合并后的JSON:
{ "data": [ { "date": "2018032012", "p": [ { "lon": -7.777, "lat": 66.666, "precip-intensity": 0.0625, "wind-dir": 256.50015, "temperature": 5.5065155, "wind-speed": 9.045654, "weather-symbol": 3, "pressure-sealevel": 102366.94 }, { "lon": -8.888, "lat": 99.999, "precip-intensity": 0.0625, "wind-dir": 256.50015, "temperature": 5.5065155, "wind-speed": 9.045654, "weather-symbol": 3, "pressure-sealevel": 102366.94 } ] } ] }
这个方案不仅能处理单个date项,就算你的JSON里有多个不同date的项,也能自动匹配合并,非常灵活。
内容的提问来源于stack exchange,提问作者Pokd
相关产品推荐
相关产品推荐

