如何为PHP二维数组中重复行的info字段添加DUPLICATED标记?
解决PHP二维数组重复子数组标记问题
实现思路
要标记重复的子数组,核心是先统计每个子数组(排除info字段,因为该字段是我们要修改的目标)的出现次数,再根据次数批量修改原数组的info值。
具体代码实现
$arr = [ ['name' => 'John', 'age' => 10, 'gender' => 'male', 'info' => ''], ['name' => 'Jeniffer', 'age' => 12, 'gender' => 'female', 'info' => ''], ['name' => 'John', 'age' => 10, 'gender' => 'male', 'info' => ''] ]; // 第一步:统计每个子数组(排除info)的出现次数 $countMap = []; foreach ($arr as $item) { // 复制子数组并移除info字段,用于生成唯一标识 $keyItem = $item; unset($keyItem['info']); // 序列化数组作为统计的键(也可用json_encode,效果一致) $key = serialize($keyItem); $countMap[$key] = isset($countMap[$key]) ? $countMap[$key] + 1 : 1; } // 第二步:遍历原数组,标记重复项 foreach ($arr as &$item) { $keyItem = $item; unset($keyItem['info']); $key = serialize($keyItem); if ($countMap[$key] > 1) { $item['info'] = 'DUPLICATED'; } } unset($item); // 解除引用,避免后续修改数组出问题 // 输出结果 print_r($arr);
代码解释
- 统计次数阶段:复制每个子数组并删除
info字段(该字段初始为空,不参与重复判断),将处理后的子数组序列化作为键,记录每个组合的出现次数。 - 标记阶段:再次遍历原数组,用同样的方式生成键,若对应次数大于1,说明该子数组存在重复,将
info设为DUPLICATED。 - 使用引用
&$item直接修改原数组元素,最后解除引用防止后续操作意外修改数组。
注意事项
- 如果子数组中包含不可序列化的类型(如资源),可以改用
json_encode生成键,PHP关联数组转JSON会保留键顺序,不影响重复判断。 - 若重复判断需要包含
info字段,只需移除unset($keyItem['info'])这一行即可。
内容的提问来源于stack exchange,提问作者Jr. Developer
相关产品推荐
相关产品推荐

