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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:11:33