Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP字符串比较未按预期工作_Php_Fwrite_Fputs - Fatal编程技术网

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