Задать вопрос
@Gangg

Как удалить дубли в CSV по значению с отдельного столбика (PHP)?

Помогите пожалуйста решить мою проблемку.

Есть CSV файл с таким содержимым:

17.12.15;01:11:57;Имя1;Фамилия1;RU;176.70.69.242;1;123;
18.12.15;05:45:43;Имя2;Фамилия2;RU;456.8.39.432;1;123;
18.12.15;09:24:32;Имя3;Фамилия3;RU;176.70.69.242;1;123;

В 6-м столбике встречаются дубли (выделил жирным).
Как мне почистить csv файл от подобных дублей?

То есть, задача следующая. Если встречаются две или больше строки с одинаковыми значениями в 6-м столбце то в файле нужно оставить только одну строку.

Заранее благодарен за помощь!

p.s Интересует вариант на PHP
  • Вопрос задан
  • 1748 просмотров
Подписаться 1 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 3
@ukoHka
Всего понемногу
$ips = array(); //массив уникальных значений
... //тут код обработки, далее в цикле
$row_items = split(";",$row); //Разбиваем строку на массив
if (in_array($row_items[5], $ips)) { //Если уже есть в массиве
//удаляем строку
} else {
$ips[] = $row_items[5]; //добавляем значение в массив
}
Ответ написан
Комментировать
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Я думаю, при таком раскладе (на основании комментариев выше), поступил бы примерно так:

$uniq_string = []; //Пустой массив уникальных значений
$uniq_column = 4; //Номер уникальной колонки
$data = file('file.csv'); //Получаем массив строк

$f = fopen('new_file.csv', 'w');
for($i = 0; $i < count($data); $i++) {
    $row_array = explode(';', $row[$i]);
    if (!in_array($row_array[$uniq_column], $uniq_string)
        $uniq_string[] = $row_array[$uniq_column];
        fwrite($f, $data[$i])
    }
}
fclose($f);


Как-то примерно так, код приблизительный и я его не тестировал, но думаю, мысль ясна... Мы переписываем файл оставляя только уникальные строки.
Ответ написан
Комментировать
@Gangg Автор вопроса
Всем спасибо. Но я уже решил проблему свои костылем) Как всегда задам вопрос на форуме, а через пол часа приходит озарение)

Вот код, может кому пригодится)


$baseCSV = file('base.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);//Складываем строки из CSV файла в масив

 
foreach($baseCSV as $itemBaseCSV){
$arrLineCsv = explode(";", $itemBaseCSV);//Формируем масив из отдельной строки по разделителю ;
$arrUniqFinish[$arrLineCsv[0].";".$arrLineCsv[1].";".$arrLineCsv[2].";".$arrLineCsv[3].";".$arrLineCsv[4].";".$arrLineCsv[5].";".$arrLineCsv[6].";".$arrLineCsv[7]] = $arrLineCsv[5];//В новый масив забиваем всю строку как ключ, а елемент масива, по которому фильтруем на дубли, как значение          

}

 
$arrUniqFinish = array_unique($arrUniqFinish);//Фильтруем дубли с помощью функции array_unique.

foreach($arrUniqFinish as $keyArr => $valueArr){
$finishSavedCsv[] = $keyArr;//Забиваем в новый масив значения которые берем с ключей масива $arrUniqFinish, который в свою очередь уже чистый от дублей по признаку 5 столбца (счет от 0)

}

file_put_contents('base.csv', implode("\n", $finishSavedCsv))//Перезаписываем CSV файл с уникальными строками
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы