如何用PHP合并两个JSON数组并按category字段整合数据?
合并JSON数组并按category整合字段
我来帮你搞定这个需求,核心思路是用category值作为临时数组的键,这样就能快速定位到相同分类的条目,把两个数组里的字段无缝整合到一起。下面是具体的PHP实现代码:
// 你的两个原始JSON字符串 $privateJson = '[{"category":183,"private_review_ids":[63,59,62]}, {"category":363,"private_review_ids":[331]}, {"category":371,"private_review_ids":[341]}, {"category":379,"private_review_ids":[350]}]'; $publicJson = '[{"category":363,"public_review_ids":[331]}, {"category":373,"public_review_ids":[343]}, {"category":384,"public_review_ids":[356]}, {"category":183,"public_review_ids":[347]}]'; // 将JSON转为PHP可操作的关联数组 $privateArray = json_decode($privateJson, true); $publicArray = json_decode($publicJson, true); // 创建临时数组,用category作为键来存储合并后的数据 $mergedData = []; // 第一步:处理私有评论数组,初始化每个分类的基础结构 foreach ($privateArray as $item) { $category = $item['category']; $mergedData[$category] = [ 'category' => $category, 'private_review_ids' => $item['private_review_ids'] ]; } // 第二步:处理公开评论数组,合并到对应分类中 foreach ($publicArray as $item) { $category = $item['category']; if (isset($mergedData[$category])) { // 如果该分类已存在,直接添加公开评论ID数组字段 $mergedData[$category]['public_review_ids'] = $item['public_review_ids']; } else { // 如果分类不存在,新建包含公开评论的条目 $mergedData[$category] = [ 'category' => $category, 'public_review_ids' => $item['public_review_ids'] ]; } } // 将以category为键的关联数组转为普通索引数组(和原始结构一致) $resultArray = array_values($mergedData); // 可选:转回JSON格式输出 $finalJson = json_encode($resultArray, JSON_PRETTY_PRINT); echo $finalJson;
代码逻辑说明:
- JSON转数组:用
json_decode($json, true)把JSON字符串转成PHP关联数组,方便后续操作。 - 临时数组做映射:用
$mergedData数组以category值为键,能快速定位到对应分类,避免嵌套循环查找,效率更高。 - 分步合并:先处理私有评论数组初始化结构,再遍历公开评论数组补充字段,确保每个分类的所有相关数据都被整合。
- 还原索引数组:用
array_values()把关联数组转回普通索引数组,和你原始的数组结构保持一致。
运行后,你会得到符合预期的合并结果,比如category=183的条目会变成:
{"category":183,"private_review_ids":[63,59,62],"public_review_ids":[347]}
内容的提问来源于stack exchange,提问作者CHarris
相关产品推荐
相关产品推荐

