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
相关产品推荐
相关产品推荐

