我有一个动态生成的CSV文件。我想删除第一行CSV,然后再次保存。
我已经google了,并且能够获得csv的第一行,但是在删除后再次写入它的部分是我被困住的地方。
这是示例
line1,data1
line2,data2
line3,data3
我想要实现的目标
line2,data2
line3,data3
删除第一行并再次保存文件
这是我的代码
$file = fopen('words.csv', 'r');
$data = fgetcsv($file,10000,",");
$data = array_shift($data);
$file = fopen('words.csv', 'w');
fputcsv($file,$data,",");
fclose($file);
我明白了:
! ) Warning: fputcsv() expects parameter 2 to be array, string given in C:\wamp\www\scrape\test.php on line
7
输出文件为空。
艾哈迈尔
答案 0 :(得分:3)
// Read the file
$file = fopen('words.csv', 'r');
// Iterate over it to get every line
while (($line = fgetcsv($file)) !== FALSE) {
// Store every line in an array
$data[] = $line;
}
fclose($file);
// Remove the first element from the stored array / first line of file being read
array_shift($data);
// Open file for writing
$file = fopen('words.csv', 'w');
// Write remaining lines to file
foreach ($data as $fields) {
fputcsv($file, $fields);
}
fclose($file);
答案 1 :(得分:0)
您的代码中存在一些错误。第一个是fgetcsv function只获得一行,所以如果你想提取所有的行,你需要一个循环。 fputcsv function也是如此。
另一个是array_shift function返回移位的值,因此您将$ data分配给您不需要的字符串。
所以,我认为你的代码必须像:
$file = fopen('words.csv', 'r');
$data=array();
while (($data_tmp = fgetcsv($file, 1000, ",")) !== FALSE) {
$data[] = $data_tmp;
}
fclose($file);
array_shift($data);
$file = fopen('words.csv', 'w');
foreach($data as $d){
fputcsv($file,$d);
}
fclose($file);