PHP合并两个字段不完全匹配的JSON文件如何实现去重
问题原因
array_unique使用SORT_REGULAR参数时会完整对比数组的所有键值,有无filters字段的两个同电影条目会被判定为不同,因此无法实现预期的去重效果。
实现代码
<?php // 读取并解析两个JSON文件 $movies1 = json_decode(file_get_contents('movies.json'), true); $movies2 = json_decode(file_get_contents('movies2.json'), true); $temp = []; // 遍历所有条目,以title作为唯一去重标识,也可替换为更可靠的link字段 foreach (array_merge($movies1, $movies2) as $item) { $uniqueKey = $item['title']; if (!isset($temp[$uniqueKey])) { $temp[$uniqueKey] = $item; } else { // 已存在同标识条目时,补充缺失的filters字段 if (!isset($temp[$uniqueKey]['filters']) && isset($item['filters'])) { $temp[$uniqueKey]['filters'] = $item['filters']; } } } // 重置为数字索引后导出JSON $result = array_values($temp); file_put_contents('movies3.json', json_encode($result, JSON_PRETTY_PRINT)); ?>
逻辑说明
上述代码用电影的唯一标识(默认用title,可自行替换为link)作为临时数组的键来去重,同标识条目会自动保留字段更完整的版本,最终输出的结果完全符合预期格式,无重复条目,且保留存在的filters字段。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

