php去除重复数据,PHP去重实现:PHP去除大文本重复行的方法

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

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

/*

文本重复字符串的去重 – 方法1

利用explode和array_unique函数实现。

存在问题:file_get_contents函数将文件全部读入内存处理,这样处理速度较快,但大文件会出现内存溢出问题

*/

function duplicate_remove_1($file_input, $file_output)

{

$content = file_get_contents($file_input);

if(!$content)

{

return 0;

}

//符号过滤与格式处理(处理为以逗号分割的字符串)

//$pattern = "/[ '.:;*?~`!@#$%^&+=-)(<>{}]|]|[|/|\|"||/";

//$content = preg_replace($pattern, '', $content); //英文符号过滤

$array = explode(',', $content);

$new_array=array_values(array_unique($array));//消除重复行

$array = NULL;

$num = count($new_array) – 1;

$content = implode("rn",$new_array);

$new_array = NULL;

$content=preg_replace('/($s*$)|(^s*^)/m','',$content); //消除空行

$_bool = file_put_contents("{$file_output}",$content);

if(!$_bool)

{

return 0;

}

$content = NULL;

return $num;

}

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

/*

文本重复字符串的去重 – 方法2

利用关联数组特性,将每个字符串作为下标,遍历文件进行赋值

存在问题:使用fopen函数循环读取文件,i/o次数多,处理速度慢

*/

function duplicate_remove($file_input, $file_output)

{

$fp = fopen($file_input, 'r');

if(!$fp)

{

return 0;

}

$array = array();

while(!feof($fp)) {

$line = fgets($fp, 1024);

$array_line = explode(',', $line);

foreach($array_line as $v) //以关联数组的方式实现去重

{

$array[$v] = $v;

}

}

fclose($fp);

$content = implode("rn",$array);

$num=count($array) -1;

$array = NULL;

$content=preg_replace('/($s*$)|(^s*^)/m','',$content); //消除空行

$_bool = file_put_contents("{$file_output}",$content);

if(!$_bool)

{

return 0;

}

$content = NULL;

return $num;

}

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

< ?php

error_reporting(E_ALL & ~E_NOTICE);

@ini_set('memory_limit','-1');

set_time_limit(0);

echo" 去除文本重复工具"."rnrn";

echo"n"."输入要整理的文件:"."n";

$dic=trim(fgets(STDIN));

/*while (!feof($dic)){

$file[]=stream_get_line($fp,65535,"rn");

}

*/

$filefile=file($dic);

$array=preg_replace('/($s*$)|(^s*^)/m','',$file); //消除空行

$new_array=array_values(array_unique($array));//消除重复行

$new_filename="new_". basename($dic);

if(file_put_contents("$new_filename",join("rn",$new_array))){

$num=count($file);

$new_num=count($new_array);

$counts=$num-$new_num;

$files=dirname(__FILE__).DIRECTORY_SEPARATOR.$new_filename;

echo<<

+———————————————-+

| [+] 去除重复完毕!

| [+] 整理后的文件为:$files

| [+] 原始字典数量:$num 行

| [+] 整理后为:$new_num 行

| [+] 共替换了$counts 行

+———————————————-+

INFO;

}

else{

echo"——————————————"."\r\n";

echo"[*] 错误!"."\r\n\r\n";

echo"[*] 找不到文件!请检查输入路径是否存在!"."\r\n";

echo"——————————————"."\r\n";

exit();

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值