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

PHP循环处理JSON数据:合并hs_code为空项的uraian与description

解决PHP中合并JSON数据的问题

我来帮你搞定这个需求!这种把hs_code为空的项的内容合并到对应有值项里的场景很常见,咱们一步步来实现。

首先,假设你的JSON数据结构大概是这样的(方便演示):

[
    {"hs_code": "123456", "uraian": "进口农产品", "description": "Imported agricultural products"},
    {"hs_code": "", "uraian": "含有机认证", "description": "With organic certification"},
    {"hs_code": "", "uraian": "净重5kg/箱", "description": "Net weight 5kg/box"},
    {"hs_code": "789012", "uraian": "工业机械设备", "description": "Industrial machinery equipment"},
    {"hs_code": "", "uraian": "配备自动控制系统", "description": "Equipped with automatic control system"}
]

核心实现思路

我们需要遍历数据,把有hs_code的项作为“主项”,然后将后续无hs_code的项的uraian和description合并到最近的主项中。下面是具体的PHP代码:

// 替换成你的实际JSON数据
$jsonData = '[...]';
// 解码JSON为关联数组
$dataArray = json_decode($jsonData, true);

$mergedResult = [];
$currentMainItem = null;

foreach ($dataArray as $item) {
    // 判断当前项是否有有效的hs_code(可根据实际数据调整判断逻辑)
    if (!empty(trim($item['hs_code']))) {
        // 将主项加入结果数组,并保存引用以便后续修改
        $mergedResult[] = $item;
        $currentIndex = count($mergedResult) - 1;
        $currentMainItem = &$mergedResult[$currentIndex];
    } else {
        // 确保存在可合并的主项,避免第一个项就是无hs_code的情况
        if ($currentMainItem !== null) {
            // 合并uraian,这里用换行分隔,你可以换成|、空格等分隔符
            $currentMainItem['uraian'] .= "\n" . $item['uraian'];
            // 合并description
            $currentMainItem['description'] .= "\n" . $item['description'];
        }
    }
}

// 如果需要转回JSON格式,保留中文不转义
$finalJson = json_encode($mergedResult, JSON_UNESCAPED_UNICODE);
print_r($finalJson);

关键细节说明

  • 引用的使用:&$mergedResult[$currentIndex]是为了直接修改结果数组里的主项,不用额外重新赋值,效率更高。
  • 空值判断:!empty(trim($item['hs_code']))可以过滤空字符串、纯空格的情况,如果你的数据里hs_code可能是null,可以改成isset($item['hs_code']) && trim($item['hs_code']) !== ''。
  • 合并分隔符:代码里用了换行符\n,你可以根据需求换成其他分隔符,比如' | '或者<br>(如果是用于网页显示)。
  • 边界处理:加了$currentMainItem !== null的判断,防止第一个元素就是无hs_code的情况导致报错。

特殊场景:按分组关联合并

如果你的数据里无hs_code的项不是跟随最近的主项,而是通过其他字段(比如group_id)关联到特定主项,那可以调整成下面的逻辑:

$groupedItems = [];

// 第一步:先把所有有hs_code的项按关联字段分组
foreach ($dataArray as $item) {
    if (!empty(trim($item['hs_code']))) {
        // 假设用group_id作为关联键,替换成你的实际关联字段
        $groupedItems[$item['group_id']] = $item;
    }
}

// 第二步:遍历无hs_code的项,合并到对应分组的主项里
foreach ($dataArray as $item) {
    if (empty(trim($item['hs_code'])) && isset($groupedItems[$item['group_id']])) {
        $groupedItems[$item['group_id']]['uraian'] .= "\n" . $item['uraian'];
        $groupedItems[$item['group_id']]['description'] .= "\n" . $item['description'];
    }
}

// 转成普通数组
$mergedResult = array_values($groupedItems);

这样就能根据你的实际数据结构灵活调整啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:41:25