PHP移除文本文件重复行时array_unique数组索引从0开始问题求助
文本去重及索引调整实现方案
现有代码问题说明
- 语法报错原因:你将
hott.txt的文本内容直接写在了PHP代码块的起始标签后,这部分内容会被PHP解析器当成代码执行,直接触发语法错误,文本内容需单独存储在hott.txt文件中,不要写入PHP代码段。 - 索引问题:
array_unique去重后会保留原数组的键值关联,文件读取的行默认从0开始索引,即使常规重置索引默认也是从0起始,只需在去重后手动重构键名即可实现从1开始的索引需求。
正确实现代码
先确认hott.txt独立存储以下内容,和PHP脚本放在同一目录:
vnea@yahoo.com vnea@yahoo.com dabrd@gmail.com vnea@yahoo.com dabrd@gmail.com bread@gmail.com bread@gmail.com vnea@yahoo.com dabrd@gmail.com bread@gmail.com syeas@hotmail.com vnea@yahoo.com vnea@yahoo.com
PHP实现代码:
<?php // 读取文件,自动跳过空行、移除每行末尾换行符 $lines = file("hott.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 清理每行首尾空白字符,避免不可见字符导致去重失效 $lines = array_map('trim', $lines); // 移除重复行 $uniqueLines = array_unique($lines); // 重构数组索引,从1开始计数 $uniqueLines = array_combine( range(1, count($uniqueLines)), array_values($uniqueLines) ); // 输出验证结果 print_r($uniqueLines); ?>
运行结果
执行代码后将得到索引从1开始的去重数组,输出如下:
Array ( [1] => vnea@yahoo.com [2] => dabrd@gmail.com [3] => bread@gmail.com [4] => syeas@hotmail.com )
补充说明
如果你需要保留每个邮箱的出现次数统计,只需要在你原有计数逻辑的基础上,取出数组所有键名(即去重后的邮箱),再用上面的array_combine方法重构从1开始的索引即可,核心去重逻辑不需要改动。
内容的提问来源于stack exchange,提问作者Diana Studebaker
相关产品推荐
相关产品推荐

