PHP字符串比较未按预期工作
我有下面的代码片段,我正试图用它来读取一个文件,该文件中的某些行可能会重复两次或更多次。这个脚本的目标是只写唯一的行(没有重复的行),但出于某种原因,它似乎没有检测到相等性。有什么想法吗PHP字符串比较未按预期工作,php,fwrite,fputs,Php,Fwrite,Fputs,我有下面的代码片段,我正试图用它来读取一个文件,该文件中的某些行可能会重复两次或更多次。这个脚本的目标是只写唯一的行(没有重复的行),但出于某种原因,它似乎没有检测到相等性。有什么想法吗 $handle = @fopen("Old.csv", "r"); $new = @fopen("New.csv", "w"); $last_line = null; if ($handle && $new) { while (($buffer = fgets($handle, 409
$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”的示例
“New.csv”应为:
apple
orange
grapes
但是它最终是“Old.csv”的精确副本。在命令提示符下尝试
cat Old.csv | sort-u>new.csv
,速度要快得多。感谢大家的回复。我无意中漏掉了一条线索,那就是我在Mac电脑上。我重新保存CSV以使用Windows格式并重新运行脚本,一切正常。我猜是因为行尾。无论如何,最重要的一点是脚本可以工作。为什么不在您的unix提示符下简单地uniq Old.csv>New.csv
?逻辑似乎很合理。。。你能确认旧的.csv文件已排序吗?我编辑了我的原始帖子。编写新文件的全部目的是避免写入重复的行。不要忘记空格、编码、特殊字符、文件类型、权限,所有这些,我只是在我的服务器(PHP5)上测试了它,在获得正确的权限后,它工作得非常好。我不尝试对数据进行排序。我正在尝试删除重复的行。在获得正确的行结尾后,您的答案确实有效地删除了重复的行,因此我接受了您的答案。
apple
orange
grapes