Сравнение строк 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, и снова запустил свой сценарий, и все хорошо. Я думаю, это были окончания строки. В любом случае, суть в том, что скрипт работает.