Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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
如何覆盖csv文件。PHP_Php_File_Csv - Fatal编程技术网

如何覆盖csv文件。PHP

如何覆盖csv文件。PHP,php,file,csv,Php,File,Csv,我昨天才开始使用PHP,所以请原谅我在代码方面的不足 我有一个名为employee\u data.csv的csv文件。它包含这样格式化的员工记录 JANE WILLIAMS,6/8/1998,55846874E,4323 PETER JONES,15/01/1982,56897547Q,1234 JAMES O'BRIEN,09/05/2001,25689514W,8475 员工显示在浏览器的表单上,每行包含员工详细信息,并在表的每行旁边显示一个删除按钮。当用户选择给定员工旁边的“删除”按钮

我昨天才开始使用PHP,所以请原谅我在代码方面的不足

我有一个名为
employee\u data.csv
的csv文件。它包含这样格式化的员工记录

JANE WILLIAMS,6/8/1998,55846874E,4323
PETER JONES,15/01/1982,56897547Q,1234
JAMES O'BRIEN,09/05/2001,25689514W,8475 
员工显示在浏览器的表单上,每行包含员工详细信息,并在表的每行旁边显示一个删除按钮。当用户选择给定员工旁边的“删除”按钮时,所选员工将从表单和employee_data.csv文件中删除,新表单将显示,而不显示已删除的员工

删除表格

我想删除csv文件中选定的记录,但在我担心删除部分之前,我只想弄清楚如何使用具有相同详细信息的新employee_details.csv覆盖employee_details.csv

我也要做到这一点

1.将employee_data.csv文件的内容内爆为字符串。
2.将字符串的内容分解为数组。
3.删除employee.data.csv
4.创建新的employee_data.csv文件。
5.将数组的内容写入新的employee_data.csv文件
6.将新文件中的员工记录输出到表中,每行包含一条员工记录

$group数组是一个对象数组,其中每个对象都是employee_data.csv文件中的员工记录。
例如,你让这条路变得更难,然后它需要变得更难

<?php 
$dataSrc = "persistence/employee_data.csv";
$dataDest = "persistence/new_employee_data.csv";

$dataFile = fopen($dataSrc, "r") or die("Unable to open file!");
$outFile = fopen($dataDest, "w") or die("Unable to open file!");

$i=0;  //index for the array
while(false !== ($csv = fgetcsv($dataFile))) {
    //$csv = [ANE WILLIAMS,6/8/1998,55846874E,4323];
    //add check to remove row
    if($csv[2] == '55846874E') continue; //skip to next itteration

    fputcsv($outFile, $csv);
}

fclose($dataFile);
fclose($outFile);

//rename($dataDest, $dataSrc); //rename dest to the source name, this will overwrite $dataSrc with $dataDest and remove $dataDest

例如,你让这条路变得更难,然后它需要变得更难

<?php 
$dataSrc = "persistence/employee_data.csv";
$dataDest = "persistence/new_employee_data.csv";

$dataFile = fopen($dataSrc, "r") or die("Unable to open file!");
$outFile = fopen($dataDest, "w") or die("Unable to open file!");

$i=0;  //index for the array
while(false !== ($csv = fgetcsv($dataFile))) {
    //$csv = [ANE WILLIAMS,6/8/1998,55846874E,4323];
    //add check to remove row
    if($csv[2] == '55846874E') continue; //skip to next itteration

    fputcsv($outFile, $csv);
}

fclose($dataFile);
fclose($outFile);

//rename($dataDest, $dataSrc); //rename dest to the source name, this will overwrite $dataSrc with $dataDest and remove $dataDest

而不是
fgets
使用
fgetcsv
fputcsv
,使用
$parts=explode(',',$str)将失败,这两行都由内置的csv函数正确处理,例如
数据,“带逗号的行”,其他内容如果使用
分解
将其拆分,则会得到4列,如果你使用
fgetcsv
你会得到3而不是
fgets
使用
fgetcsv
fputcsv
,使用
$parts=explode(',',$str)将失败,这两行都由内置的csv函数正确处理,例如
数据,“带逗号的行”,其他内容
如果使用
分解
将其拆分,则会得到4列,如果使用
fgetcsv
则会得到3次感谢的建议,我肯定把它复杂化了!新文件中没有删除的记录,在new_employee_data.csv中格式完美,但是我得到一个错误“fputcsv()期望参数2是数组,第24行给出布尔值”,这是第fputcsv($outFile,$csv)行;好的,我更新了while循环。如果文件末尾有空行,则可能发生这种情况。因此,文件尚未完成,但没有csv数据。所以在这种情况下,
$csv
可能是false,所以我们可以在循环中使用它,这样它就退出了循环。在它进入循环之前,获取csv数据,该数据为
false
,然后尝试将其放入
fputcsv
,该数据会爆炸,因为它是布尔值而不是数组。这是有道理的,我仍然会得到相同的错误,但是-fputcsv()希望参数2是数组,布尔值在第24行中给出。此外,$csv数组中的内容始终是文件“PETER JONES”(15/01/198256897547q,1234)中的第二行,而不管if语句中的内容是什么。因此,“PETER JONES”,15/01/198256897547q,1234是唯一可以写入新的_employee_数据文件的文件。这很奇怪,很难测试,因为显然我无法打开该文件,但它应该像
那样工作,而
循环可以在PHP文档页面上看到相同的设置,最后一件事,你用的是什么操作系统?如果是Mac电脑,有时会导致
fgetcsv
函数的行尾出现问题,通常只在旧版Mac电脑上出现,那么它应该可以处理windows和linux,只要里面没有奇怪的字符(如MsWord中的卷曲引号),同时确保这里有一个
=
,而
中有一个
(false!==($csv=fgetcsv($dataFile))
不是
$csv==fgetcsv(…)
单一的
=
是分配,双重的是对建议的比较,我肯定过于复杂了!新文件中没有在new_employee_data.csv中完全格式化的删除记录,但是我得到了一个错误“fputcsv()期望参数2是数组,布尔值在第24行给出,这是fputcsv($outFile,$csv)行;好的,我更新了while循环。如果文件末尾有一个空行,可能会发生这种情况。因此,文件没有完成,但没有csv数据。因此在这种情况下,
$csv
可能为false,所以我们可以在循环中使用它,这样它就退出了循环。在进入循环之前,获取csv数据,该数据为
false
t然后尝试将其放入
fputcsv
中,因为它是一个布尔值而不是一个数组。这是有道理的,我仍然得到相同的错误,但是-fputcsv()希望参数2是数组,布尔值在第24行给出。另外,$csv数组中的内容始终是文件“PETER JONES”中的第二行,15/01/198256897547Q,1234,不管if声明中的内容。因此“PETER JONES”,15/01/198256897547q,1234是唯一一个可以写入新的员工数据文件的文件。这很奇怪,很难测试,因为显然我无法打开该文件,但它应该像
那样工作。而
循环,你可以在PHP文档页面上看到它的相同设置,就在这里最后一件事,什么操作系统您正在使用吗?如果是Mac电脑,有时会导致
fgetcsv
函数的行尾出现问题,通常只在旧版Mac电脑上使用,那么它应该可以处理windows和linux,只要里面没有奇怪的字符(如MsWord中的卷曲引号),也请确保