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

PHP如何识别数组重复值并通过数字后缀重命名重复项

PHP数组重复值追加序号实现方法

实现逻辑

  • 第一步用array_count_values()统计数组内每个值的出现次数,筛选出出现次数大于1的重复值
  • 第二步单独维护一个重复值的序号计数映射,遍历原数组时,非重复值直接保留,重复值按出现顺序拼接递增序号后缀即可

完整实现代码

<?php
// 待处理原数组
$netAdapters = [
    '  QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) ',
    '  Microsoft Network Adapter Multiplexor Driver ',
    '  QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) #75 ',
    '  QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) '
];

// 统计所有值的出现频次
$valueFreq = array_count_values($netAdapters);
// 重复值序号计数器
$seqCounter = [];
$processed = [];

foreach ($netAdapters as $item) {
    // 非重复值直接存入结果
    if ($valueFreq[$item] === 1) {
        $processed[] = $item;
        continue;
    }
    // 首次遇到该重复值时初始化序号为1
    if (!isset($seqCounter[$item])) {
        $seqCounter[$item] = 1;
    }
    // 拼接序号后缀:rtrim用于去掉原字符串末尾的多余空格再拼后缀,和示例输出格式对齐
    $processed[] = rtrim($item) . '_' . $seqCounter[$item] . ' ';
    // 序号自增
    $seqCounter[$item]++;
}

// 打印处理结果
print_r($processed);

运行输出结果

执行代码后输出完全匹配预期:

Array
(
    [0] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_1 
    [1] =>   Microsoft Network Adapter Multiplexor Driver 
    [2] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client) #75 
    [3] =>   QLogic BCM57810 10 Gigabit Ethernet (NDIS VBD Client)_2 
)

注意事项

  • 如果你的实际业务数据中,字符串末尾没有示例里打印数组时自动对齐的多余空格,可以去掉rtrim()和末尾补的空格,直接用$item . '_' . $seqCounter[$item]拼接即可
  • 序号严格按照重复值在原数组中的出现顺序从1开始递增,不会打乱原数组键的顺序

内容的提问来源于stack exchange,提问作者James.R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:15:42