Поиск дубликатов в строках и вывод их

nulledpapa

Постоялец
Регистрация
1 Фев 2016
Сообщения
147
Реакции
100
Добрый день! подскажите как сделать поиск и вывод строк в каких есть дубликаты! вот есть фал присоединяю его! как в нем найти все дубли и написать к примеру:

пример вывода результата из файла base.txt
255 дубль
1001 дубль
строка 358 дубль
.....


то есть у меня в файле попались дубли как их найти не могу понять, выкладываю часть txt в нем 22 дубля или более то есть названия сходятся но я не могу их удалить так как мне надо понять что это за товары! а глазами смотреть жёстко! помогите кто может! за ранее благодарен! на php надо!


на форуме нашел файл который ищет дубли в строках разделенные знаком "|" но как его переделать не могу понять под строки!!!

PHP:
<?php
$file = new SplFileObject('base.txt');

foreach ($file as $i => $line) {
  $values = array_flip(array_count_values(explode('|', trim($line))));

  if (count($values) < 2) continue;

  unset($values[1]);

  echo "Строка ", $i + 1, ", дубликаты: ", implode(", ", $values), PHP_EOL;
}

?>
 
Вон смотри в коде константа конца строки - PHP_EOL . попробуй подставить ее в вместо '|'
 
Вон смотри в коде константа конца строки - PHP_EOL . попробуй подставить ее в вместо '|'


PHP:
<?php
$file = new SplFileObject('base.txt');

foreach ($file as $i => $line) {
  $values = array_flip(array_count_values(explode(PHP_EOL, trim($line))));

  if (count($values) < 2) continue;

  unset($values[1]);

  echo "Строка ", $i + 1, ", дубликаты: ", implode(", ", $values), PHP_EOL;
}

?>

поставил не сработало! что не так?
 
не вижу структуры файла, тебе нужно искать дубликаты строк или слов строках?
 
PHP:
$file = file('base.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (empty($file)) return 'empty';

$values = array_count_values($file);

foreach ($values as $line => $count) {
  if ($count < 2) continue;

  echo "Строка: ", $line, ", дублируется {$count} раз", PHP_EOL;
}
 
PHP:
$file = file('base.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (empty($file)) return 'empty';

$values = array_count_values($file);

foreach ($values as $line => $count) {
  if ($count < 2) continue;

  echo "Строка: ", $line, ", дублируется {$count} раз<br>", PHP_EOL;
}


шикардосик!

Для просмотра ссылки Войди или Зарегистрируйся ты лучший!

смотри а реально ли сделать teatxrea какой нить чтобы вставил нажал кнопку а он уже вывел результат как щас без подключения base.txt а то порой проверить очень неудобно писать в base.txt заходя по ftp, а уже был бы прикольный скрипт и дизайн бы я до оформил и выложил тут многим был бы полезен! за ранее благодарен наброскам кома также как и выше! тупо форму я уже бы диз докрутил!

1. просто понять бы как прикрутить textarea и запитать его на кнопку! за ранее благодарен!
2. еще бы в результате выводить бы строки где дубли и само значение

для примера:
Строка 230, 450: Ballu BSLI-18H N1 DC Inverter, дублируется 2 раз
Строка 170, 570, 1007: Royal Clima CO-4C 12HN, дублируется 3 раз


щас выводит так:
Строка: Ballu BSLI-18H N1 DC Inverter, дублируется 2 раз
Строка: Royal Clima CO-4C 12HN, дублируется 3 раз
Строка: Carrier 42QCR021713G/38QCR021713G, дублируется 2 раз
Строка: Gree GWH12NB-K3NNC7A, дублируется 2 раз
Строка: Hisense AS-07HR4SYDDHG, дублируется 2 раз
Строка: Neoclima NS/NU-HAL09, дублируется 2 раз
Строка: NIAGARA KFR-51W(G)/G1-2, дублируется 2 раз
Строка: NIAGARA KFС-25W(G)T1-2, дублируется 2 раз
Строка: Timberk AC TIM 09H S10B, дублируется 3 раз
Строка: Timberk AC TIM 09H S2, дублируется 2 раз
Строка: Timberk AC TIM 12H S10B, дублируется 2 раз
Строка: Timberk AC TIM 24H S8ML, дублируется 3 раз
Строка: Toshiba RAV-SM-806KRT-E, дублируется 2 раз
Строка: Venterra VSV-09HRN DC Inverter, дублируется 2 раз
Строка: Venterra VSV-18HRN, дублируется 2 раз
Строка: Venterra VSV-24HRN, дублируется 2 раз
Строка: MDV MDCC-36 HRN1, дублируется 2 раз
Строка: MDV MDCC-48 HRN1, дублируется 2 раз
Строка: NeoClima NS/NU-GA481TA8, дублируется 2 раз



моя попытка не привела к результату! чистый лист! вот код

PHP:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" media="screen" href="styles.css" >
</head>
<body>

<?php
$text = $_POST['text'];


if (!empty($text)) {


$file = file($text, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (empty($file)) return 'empty';

$values = array_count_values($file);

foreach ($values as $line => $count) {
  if ($count < 2) continue;

  echo "Строка: ", $line, ", дублируется {$count} раз<br>", PHP_EOL;
}


   
} else { ?>

<form class="contact_form" action="#" method="post" name="contact_form">
  <ul>
  <li>
  <h2>Проверка дублей в строках (строка=значение)</h2>
   
  </li>
  <li>
  <label for="text">Значения для проверки:</label>
  <textarea name="text" cols="40" rows="6" required ></textarea>
  </li>
  <li>
     <button class="submit" type="submit">Проверить</button>
  </li>
  </ul>
</form>
<?php } ?>
</body>
</html>
 
Последнее редактирование:
Если лень менять file() на explode(), то можно просто добавить обёртку data://
PHP:
$file = file("data://text/plain,$text", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
 
Если лень менять file() на explode(), то можно просто добавить обёртку data://
PHP:
$file = file("data://text/plain,$text", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);


супер прокатило! спасибо обертка самое то!

а как бы еще такое решить? тоест пишет в каких строках иммено дубликаты и значение

2. еще бы в результате выводить бы строки где дубли и само значение

для примера:
Строка 230, 450: Ballu BSLI-18H N1 DC Inverter, дублируется 2 раз
Строка 170, 570, 1007: Royal Clima CO-4C 12HN, дублируется 3 раз



если есть время латтео или лаг помоги чутка осталось)))
 
Последнее редактирование:
Какое элегантное решение !
PHP:
$values = array_count_values($file);

супер прокатило! спасибо обертка самое то!
а как бы еще такое решить? тоест пишет в каких строках иммено дубликаты и значение
2. еще бы в результате выводить бы строки где дубли и само значение
А это что? Строка 230, 450: Ballu BSLI-18H N1 DC Inverter, дублируется 2 раз
 
Какое элегантное решение !
А это что? Строка 230, 450: Ballu BSLI-18H N1 DC Inverter, дублируется 2 раз
Похоже, что при подсчете строки нужно запоминать строку, в которой упоминается дубль
 
Назад
Сверху