在php日常开发中,我们常常需要对字符串做去重处理,例如去掉连续或分散的重复字符,或者按照逗号等分隔符对子串进行去重。下面介绍几种常见且实用的实现方式。

一、去除字符串中重复的字符
如果目标是把字符串里出现多次的字符只保留一次,可以先将字符串拆成数组,利用 array_unique 去重后再拼回字符串。
<?php
// 去除字符串中所有重复字符,只保留首次出现的字符
$str = 'aabbccddeeffg';
$chars = str_split($str); // 拆分为字符数组
$unique = array_unique($chars); // 数组去重
$result = implode('', $unique); // 重新拼接
echo $result; // 输出 abcdefg
?>
二、去除连续重复的字符
当字符串中存在连续重复字符,如 aaabbb,可使用正则直接合并连续相同内容。
<?php
$str = 'aaabbbcccddde';
// 使用正则将连续相同字符替换为单个字符
$result = preg_replace('/(.)1+/', '$1', $str);
echo $result; // 输出 abcde
?>
三、按分隔符对子串去重
如果是 a,b,a,c,b 这种用逗号分隔的字符串,需要按子串去重,可先 explode 再 array_unique。
<?php
$str = 'apple,banana,apple,orange,banana';
$arr = explode(',', $str);
$unique = array_unique($arr);
$result = implode(',', $unique);
echo $result; // 输出 apple,banana,orange
?>
四、方法对比
| 场景 | 推荐函数 | 说明 |
|---|---|---|
| 字符级去重 | str_split + array_unique | 适合无序字符去重 |
| 连续重复 | preg_replace | 正则合并连续相同字符 |
| 子串去重 | explode + array_unique | 按分隔符拆分后去重 |
五、小结
php字符串去重并不复杂,核心思路是先转化结构(数组或正则匹配),再利用语言自带函数处理。根据实际数据形态选择合适方案,可显著提升代码可读性和执行效率。