返回首页
当前位置: 主页 > 网络编程 > Php实例教程 >

PHP去重实现:PHP去除大文本重复行的方法

时间:2016-12-10 22:54来源:知行网www.zhixing123.cn 编辑:麦田守望者

PHP处理大文本可能会出现各种性能问题,一种简单的方法是利用PHP自带的array_unique数组去重函数,另一种简单方法则为利用关联数组特性实现。下面是相关实现方法主要代码,仅供参考。

1. 利用PHP数组去重函数array_unique实现


PHP代码
1./*
2.文本重复字符串的去重 – 方法1
3.利用explode和array_unique函数实现。
4.存在问题:file_get_contents函数将文件全部读入内存处理,这样处理速度较快,但大文件会出现内存溢出问题
5.*/
6.function duplicate_remove_1($file_input, $file_output)
7.{
8. $content = file_get_contents($file_input);
9. if(!$content)
10. {
11. return 0;
12. }
13. //符号过滤与格式处理(处理为以逗号分割的字符串)
14. //$pattern = "/[ '.:;*?~`!@#$%^&+=-)(<>{}]|]|[|/|\|"||/";
15. //$content = preg_replace($pattern, '', $content); //英文符号过滤
16. $array = explode(',', $content);
17. $new_array=array_values(array_unique($array));//消除重复行
18. $array = NULL;
19. $num = count($new_array) – 1;
20.
21. $content = implode("rn",$new_array);
22. $new_array = NULL;
23.
24. $content=preg_replace('/($s*$)|(^s*^)/m','',$content); //消除空行
25. $_bool = file_put_contents("{$file_output}",$content);
26. if(!$_bool)
{
return 0;
}
27. $content = NULL;
28.
29. return $num;
30.}

2. 利用PHP关联数组特性实现


PHP代码
1./*
2.文本重复字符串的去重 – 方法2
3.利用关联数组特性,将每个字符串作为下标,遍历文件进行赋值
4.存在问题:使用fopen函数循环读取文件,i/o次数多,处理速度慢
5.*/
6.function duplicate_remove($file_input, $file_output)
7.{
8. $fp = fopen($file_input, 'r');
9. if(!$fp)
10. {
11. return 0;
12. }
13.
14. $array = array();
15. while(!feof($fp)) {
16. $line = fgets($fp, 1024);
17. $array_line = explode(',', $line);
18. foreach($array_line as $v) //以关联数组的方式实现去重
19. {
20. $array[$v] = $v;
21. }
22. }
23. fclose($fp);
24.
25. $content = implode("rn",$array);
26. $num=count($array) -1;
27. $array = NULL;
28.
29. $content=preg_replace('/($s*$)|(^s*^)/m','',$content); //消除空行
30. $_bool = file_put_contents("{$file_output}",$content);
31. if(!$_bool)
{
return 0;
}
32. $content = NULL;
33.
34. return $num;
35.}

其他参考:php简单去除大型文本重复


XML/HTML代码
1. <?php
2.error_reporting(E_ALL & ~E_NOTICE);
3.@ini_set('memory_limit','-1');
4.set_time_limit(0);
5.echo" 去除文本重复工具"."rnrn";
6.echo"n"."输入要整理的文件:"."n";
7.$dic=trim(fgets(STDIN));
8./*while (!feof($dic)){
9. $file[]=stream_get_line($fp,65535,"rn");
10.}
11. */
12.
13.$filefile=file($dic);
14.$array=preg_replace('/($s*$)|(^s*^)/m','',$file); //消除空行
15.$new_array=array_values(array_unique($array));//消除重复行
16.$new_filename="new_". basename($dic);
17.
18.if(file_put_contents("$new_filename",join("rn",$new_array))){
19.
20. $num=count($file);
21. $new_num=count($new_array);
22. $counts=$num-$new_num;
23. $files=dirname(__FILE__).DIRECTORY_SEPARATOR.$new_filename;
24.
25. echo<<<INFO
26. +———————————————-+
27. | [+] 去除重复完毕!
28. | [+] 整理后的文件为:$files
29. | [+] 原始字典数量:$num 行
30. | [+] 整理后为:$new_num 行
31. | [+] 共替换了$counts 行
32. +———————————————-+
33. INFO;
34.}
35.else{
36. echo"——————————————"."rn";
37. echo"[*] 错误!"."rnrn";
38. echo"[*] 找不到文件!请检查输入路径是否存在!"."rn";
39. echo"——————————————"."rn";
40. exit();
41.}
42.?>

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):php php教程 php实例教程 php5 php源代码 php基础教程 php技巧 php6
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片