首页 > 开发 > PHP > 正文

php删除文本文件中重复行的方法

2024-05-04 23:34:46
字体:
来源:转载
供稿:网友

这篇文章主要介绍了php删除文本文件中重复行的方法,涉及php操作文本文件的相关技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了php删除文本文件中重复行的方法。分享给大家供大家参考。具体分析如下:

这个php函数用来删除文件中的重复行,还可以指定是否忽略大小写,和指定换行符

 

 
  1. /** 
  2. * RemoveDuplicatedLines 
  3. * This function removes all duplicated lines of the given text file. 
  4. * 
  5. * @param string 
  6. * @param bool 
  7. * @return string 
  8. */ 
  9. function RemoveDuplicatedLines($Filepath$IgnoreCase=false, $NewLine="/n"){ 
  10. if (!file_exists($Filepath)){ 
  11. $ErrorMsg = 'RemoveDuplicatedLines error: '
  12. $ErrorMsg .= 'The given file ' . $Filepath . ' does not exist!'
  13. die($ErrorMsg); 
  14. $Content = file_get_contents($Filepath); 
  15. $Content = RemoveDuplicatedLinesByString($Content$IgnoreCase$NewLine); 
  16. // Is the file writeable? 
  17. if (!is_writeable($Filepath)){ 
  18. $ErrorMsg = 'RemoveDuplicatedLines error: '
  19. $ErrorMsg .= 'The given file ' . $Filepath . ' is not writeable!';  
  20. die($ErrorMsg); 
  21. // Write the new file 
  22. $FileResource = fopen($Filepath'w+');  
  23. fwrite($FileResource$Content);  
  24. fclose($FileResource);  
  25.  
  26. /** 
  27. * RemoveDuplicatedLinesByString 
  28. * This function removes all duplicated lines of the given string. 
  29. * 
  30. * @param string 
  31. * @param bool 
  32. * @return string 
  33. */ 
  34. function RemoveDuplicatedLinesByString($Lines$IgnoreCase=false, $NewLine="/n"){ 
  35. if (is_array($Lines)) 
  36. $Lines = implode($NewLine$Lines); 
  37. $Lines = explode($NewLine$Lines); 
  38. $LineArray = array(); 
  39. $Duplicates = 0; 
  40. // Go trough all lines of the given file 
  41. for ($Line=0; $Line < count($Lines); $Line++){ 
  42. // Trim whitespace for the current line 
  43. $CurrentLine = trim($Lines[$Line]); 
  44. // Skip empty lines 
  45. if ($CurrentLine == ''
  46. continue
  47. // Use the line contents as array key 
  48. $LineKey = $CurrentLine
  49. if ($IgnoreCase
  50. $LineKey = strtolower($LineKey); 
  51. // Check if the array key already exists, 
  52. // if not add it otherwise increase the counter 
  53. if (!isset($LineArray[$LineKey])) 
  54. $LineArray[$LineKey] = $CurrentLine;  
  55. else 
  56. $Duplicates++; 
  57. // Sort the array 
  58. asort($LineArray); 
  59. // Return how many lines got removed 
  60. return implode($NewLinearray_values($LineArray));  

使用范例:

 

 
  1. // Example 1 
  2. // Removes all duplicated lines of the file definied in the first parameter. 
  3. $RemovedLinesCount = RemoveDuplicatedLines('test.txt'); 
  4. print "Removed $RemovedLinesCount duplicate lines from the test.txt file."
  5. // Example 2 (Ignore case) 
  6. // Same as above, just ignores the line case. 
  7. RemoveDuplicatedLines('test.txt', true); 
  8. // Example 3 (Custom new line character) 
  9. // By using the 3rd parameter you can define which character 
  10. // should be used as new line indicator. In this case 
  11. // the example file looks like 'foo;bar;foo;foo' and will 
  12. // be replaced with 'foo;bar'  
  13. RemoveDuplicatedLines('test.txt', false, ';'); 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表