php - Удаление повторяющихся строк

170
12 июля 2018, 12:40

На хостинге есть файл представляющий собой форму:

abc | Text | Text
cba | Text | Text
cba | Text | Text

Сравнивать нужно только первый столбец. И вопрос заключается, как можно сделать удаление повторно строк, в которых совпадают первые столбцы?

Answer 1

Ещё вариант в коллекцию ответов:

$fn = 'file_name.txt'; // имя текст.файла
$arr = file_exists($fn) ? file($fn, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES) : [];
if (! empty($arr)) {
    $tmp = [];
    $arr = array_filter($arr, function($i)use(&$tmp){
        return (in_array(($e = explode('|', $i)[0]), $tmp)) ? '' : $tmp[] = $e;
    });
    file_put_contents($fn, join("\n", $arr));
}
Answer 2
$inFile = fopen('myfile', 'r');
if ($inFile) {
  $outFile = fopen('myfile.tmp', 'wb');
  if ($outFile) {
    $keys = [];
    while (!feof($inFile)) {
      $str = fgets($inFile);
      $strData = explode(' | ', $str);
      if (!isset($keys[$strData[0]])) {
        fwrite($outFile, $str . PHP_EOL);
        $keys[] = $strData[0];
      }
    }
    fclose($outFile);
  }
  fclose($inFile);
  rename('myfile.tmp', 'myfile');
}
READ ALSO
Занесение ид и текста в бд

Занесение ид и текста в бд

не могу понять как сделать такую штуку, уже сижу долгоЕсть таблица events в которую нужно занести ид категории и текст этой категории

216
Nginx + Letsencrypt + Node Js (Socket IO) + PHP

Nginx + Letsencrypt + Node Js (Socket IO) + PHP

Есть NGINX, установлен сертификат от Lets Encrypt через certbotИ стоит сайт на PHP

137
как размножить?

как размножить?

Есть строка Один Два Три

191