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
相关产品推荐
相关产品推荐

