PHP查询结果数组中查找除id_import外字段全匹配的重复行方法
PHP实现查找指定字段重复的二维数组记录
实现思路
- 以
date、id_account、id_property、method、type五个字段的组合值作为唯一分组键,对原始二维数组做分组 - 过滤分组后元素数量≥2的分组,即为符合要求的重复数据集合
实现代码
function getDuplicateImportRecords(array $originalData): array { $grouped = []; // 遍历原始数据做分组 foreach ($originalData as $item) { // 提取除id_import外的5个核心字段生成唯一键 $uniqueKey = json_encode([ $item['date'], $item['id_account'], $item['id_property'], $item['method'], $item['type'] ]); $grouped[$uniqueKey][] = $item; } $duplicates = []; // 过滤出分组内数量≥2的重复数据 foreach ($grouped as $group) { if (count($group) >= 2) { // 可根据需求调整:这里是把所有重复项扁平化合并,也可以保留分组结构 array_push($duplicates, ...$group); } } return $duplicates; } // 调用示例 // $yourData 是你从数据库查询得到的二维数组 $duplicateRecords = getDuplicateImportRecords($yourData); // 打印结果 print_r($duplicateRecords);
代码说明
- 使用
json_encode生成分组键的优势是可以避免字段值本身包含分隔符导致的键冲突问题,比自定义分隔符拼接的方案更稳妥 - 如果需要保留重复数据的分组关系(即同一组重复数据放在同一个子数组里),可以把过滤分组的逻辑改为直接把符合条件的
$group塞到$duplicates里即可 - 若数据量特别大,也可以在遍历过程中直接判断是否已经存在对应键,存在的话直接把当前项和之前的项加入重复集合,节省后续过滤的内存开销。
内容的提问来源于stack exchange,提问作者BECHA AMINE
相关产品推荐
相关产品推荐

