You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:30:37