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

5年以前  |  阅读数:917 次  |  编程语言:PHP 

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

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


    /**
     * RemoveDuplicatedLines
     * This function removes all duplicated lines of the given text file.
     *
     * @param   string
     * @param   bool
     * @return  string
     */
    function RemoveDuplicatedLines($Filepath, $IgnoreCase=false, $NewLine="\n"){
      if (!file_exists($Filepath)){
        $ErrorMsg = 'RemoveDuplicatedLines error: ';
        $ErrorMsg .= 'The given file ' . $Filepath . ' does not exist!';
        die($ErrorMsg);
      }
      $Content = file_get_contents($Filepath);
      $Content = RemoveDuplicatedLinesByString($Content, $IgnoreCase, $NewLine);
      // Is the file writeable?
      if (!is_writeable($Filepath)){
        $ErrorMsg = 'RemoveDuplicatedLines error: ';
        $ErrorMsg .= 'The given file ' . $Filepath . ' is not writeable!';  
        die($ErrorMsg);
      }
      // Write the new file
      $FileResource = fopen($Filepath, 'w+');   
      fwrite($FileResource, $Content);    
      fclose($FileResource);  
    }

    /**
     * RemoveDuplicatedLinesByString
     * This function removes all duplicated lines of the given string.
     *
     * @param   string
     * @param   bool
     * @return  string
     */
    function RemoveDuplicatedLinesByString($Lines, $IgnoreCase=false, $NewLine="\n"){
      if (is_array($Lines))
        $Lines = implode($NewLine, $Lines);
      $Lines = explode($NewLine, $Lines);
      $LineArray = array();
      $Duplicates = 0;
      // Go trough all lines of the given file
      for ($Line=0; $Line < count($Lines); $Line++){
        // Trim whitespace for the current line
        $CurrentLine = trim($Lines[$Line]);
        // Skip empty lines
        if ($CurrentLine == '')
          continue;
        // Use the line contents as array key
        $LineKey = $CurrentLine;
        if ($IgnoreCase)
          $LineKey = strtolower($LineKey);
        // Check if the array key already exists,
        // if not add it otherwise increase the counter
        if (!isset($LineArray[$LineKey]))
          $LineArray[$LineKey] = $CurrentLine;    
        else        
          $Duplicates++;
      }
      // Sort the array
      asort($LineArray);
      // Return how many lines got removed
      return implode($NewLine, array_values($LineArray));  
    }

使用范例:


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

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

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例