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

如何用PHP对比两个JSON对象并输出差异键名与新旧值?

PHP实现两个JSON对象的差异对比

给定两个JSON格式的数组对象,我们需要找出其中值有差异的字段,并生成包含键名、旧值、新值的结果数组,具体实现步骤如下:

步骤说明

  1. 将JSON字符串解析为PHP关联数组
  2. 提取两个数组中的目标对象(示例中为数组包裹的单个对象)
  3. 遍历两个对象的共同键,对比值的差异
  4. 收集差异数据并整理成指定格式

完整代码示例

<?php
// 原始JSON字符串
$json1 = '[{"acc_number":1001,"acc_name":"admin","acc_loc":"headquarters"}]';
$json2 = '[{"acc_number":1001,"acc_name":"New Admin","acc_loc":"branch"}]';

// 解析为PHP关联数组
$object1 = json_decode($json1, true);
$object2 = json_decode($json2, true);

// 取出数组中的单个对象
$oldData = $object1[0];
$newData = $object2[0];

$result = [];

// 遍历两个对象的共同键,避免处理不存在的键
foreach (array_intersect_key($oldData, $newData) as $key => $value) {
    // 严格对比值(包括类型),如果不同则记录差异
    if ($oldData[$key] !== $newData[$key]) {
        $result[] = [
            'key_name' => $key,
            'old_value' => $oldData[$key],
            'new_value' => $newData[$key]
        ];
    }
}

// 输出结果(可选:转成格式化后的JSON)
echo json_encode($result, JSON_PRETTY_PRINT);
?>

代码说明

  • json_decode($json, true):将JSON字符串转为PHP关联数组,方便后续键值操作
  • array_intersect_key:只保留两个对象都存在的键,避免因键不存在导致的报错
  • 严格比较!==:确保值的类型和内容都不同才会被记录(比如数字1001和字符串"1001"会被视为不同)
  • JSON_PRETTY_PRINT:让输出的JSON格式更易读,实际使用可根据需求选择是否添加

运行上述代码后,会得到符合要求的结果:

[
    {
        "key_name": "acc_name",
        "old_value": "admin",
        "new_value": "New Admin"
    },
    {
        "key_name": "acc_loc",
        "old_value": "headquarters",
        "new_value": "branch"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:15:42