Сравнение строк PHP не работает должным образом

У меня есть следующий фрагмент кода, который я пытаюсь использовать для чтения файла, в котором несколько строк могут повторяться два или более раз. Цель этого скрипта - писать только уникальные строки (без дубликатов), но по некоторым причинам кажется, что он не обнаруживает равенство. Какие-нибудь мысли?

$handle = @fopen("Old.csv", "r");
$new = @fopen("New.csv", "w");
$last_line = null;

if ($handle && $new) {
    while (($buffer = fgets($handle, 4096)) !== false) {
        if( $last_line != $buffer ) fwrite( $new, $buffer );
        $last_line = $buffer;
    }
    if (!feof($handle)) {
        echo "Error: unexpected fgets() fail\n";
    }
    fclose($handle);
    fclose($new);
}

Вот пример "Old.csv"

 apple
 apple
 orange
 grapes
 grapes
 grapes

"New.csv" должен быть:

apple
orange
grapes

Но это в конечном итоге точная копия "Old.csv".

2 ответа

Решение

Пытаться cat old.csv | sort -u > new.csv в командной строке это намного быстрее.

Спасибо всем, кто ответил. Я непреднамеренно пропустил подсказку, что я нахожусь на Mac. Я сохранил CSV, чтобы использовать формат Windows, и снова запустил свой сценарий, и все хорошо. Я думаю, это были окончания строки. В любом случае, суть в том, что скрипт работает.

Другие вопросы по тегам