PHP删除所有行的同一行文件上的重复字符串?

时间:2017-06-21 21:49:50

标签: php

我为一个令人困惑的头衔道歉。基本上,我正面临着我的网站的问题,最终完全窃听它。我需要在我的文本文件列表中的所有行上基本删除同一行上的所有重复条目。即。

123123
123
123

有时我会在同一行上输入123123等条目,每行应该只有123。这只是一个例子当然,我很难解释。我再次道歉。我希望这足以让你喘息我的意思。

总结一下,我需要删除字符串123123的重复部分,因此对于我的文本文件中的所有行,它只是123。

帮助表示赞赏。

这是一个实例:

2017-06-21:127.0.0.12017-06-21:127.0.0.1
2017-06-21:127.0.0.12017-06-21:127.0.0.1
2017-06-21:127.0.0.12017-06-21:127.0.0.1
2017-06-21:127.0.0.1

2 个答案:

答案 0 :(得分:0)

重复删除字符串的基本算法:

  1. 将它分成两半。
  2. 如果两半都相同,则将整个字符串替换为一半。
  3. 警告:这并不关心字符串意图是否重复,因此可能会删除一些你不想要的内容。< / p>

    function deduplicate($str) {
        $str = trim($str);
        list($beginning, $end) = str_split($str, strlen($str) / 2);
        return ($beginning == $end) ? $end : $str;
    }
    

    假设您的文件中有一系列行,您可以将其应用于array_map

    $lines = array_map('deduplicate', $lines);
    

答案 1 :(得分:0)

$linesStr = '2017-06-21:127.0.0.12017-06-21:127.0.0.1
2017-06-21:127.0.0.12017-06-21:127.0.0.1
2017-06-21:127.0.0.12017-06-21:127.0.0.1
2017-06-21:127.0.0.1';

//can be \n only
$lines = explode("\r\n", $linesStr);

//loop through all lines
foreach($lines as $i => $line)
{
  $lineLen = ceil(strlen($line) / 2);
  $first = substr($line, 0, $lineLen);
  $second = substr($line, $lineLen);
  if($first == $second)
  {
      $lines[$i] = $first;
  }  
}

$lines = implode("\r\n", $lines);

应该这样做......