如何从 php 中的 csv 文件中删除特定行?
How to remove specific lines from a csv file in php?
我有一个这样的 csv 文件:
我想删除前 3 行以及行 'Data as of',以便只有我的 table 个值。
我试过 array_shift($csv_data);
但它只删除了第一行,我该怎么做?
<?php
//Modifications on csv file
$delimiter = ";";
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
//Add columns with the name of pictures at the end of file : style_color.jpg
$data['Pictures Names'] = (!empty($data[4]) ? ($data[7] ?: '') . "_" .$data[4].'.jpg' : '');
//Delete two columns with pictures
unset($data[1]);
unset($data[2]);
$csv_data[] = $data;
$row++;
}
fclose($handle);
}
//delete fist 3 lines
array_shift($csv_data);
if (($handle = fopen($nomcsv, 'w')) !== FALSE) {
foreach ($csv_data as $data) {
fputcsv($handle, $data, $delimiter);
}
fclose($handle);
}
?>
如果我对你的问题理解正确,你想删除前三行,但只执行一次array_shift
。最简单的解决方案是使用 array_shift 函数三次。
//delete fist 3 lines
array_shift($csv_data);
array_shift($csv_data);
array_shift($csv_data);
关于删除日期:
如果它是 csv-file 中的最后一个条目(或行),您可以使用 array_pop($csv_data)
,它从数组中删除最后一个条目。
如果它不是最后一行,您可以在 while 循环中过滤它,同时填充 $csv_data
数组:
if(substr($data[0], 0, 4) === "data") {
continue;
}
$csv_data[] = $data;
这将跳过第一个单元格字符串以“数据”开头的每一行,因此它甚至不会进入 $csv_data 数组
您可以使用array_slice and array_pop
$csv_data = array_slice($csv_data, 3); // this will remove first three elements
array_pop($csv_data);// this will remove last element from array
但在你的情况下你可以跳过添加它们
$delimiter = ";";
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
//Add columns with the name of pictures at the end of file : style_color.jpg
$data['Pictures Names'] = (!empty($data[4]) ? ($data[7] ?: '') . "_" . $data[4] . '.jpg' : '');
//Delete two columns with pictures
unset($data[1]);
unset($data[2]);
if ($row > 3)//start adding after third row
if (strpos($data[0], "Data as of") !== 0)//Dont add any line that starts with 'Data as of'
$csv_data[] = $data;
$row++;
}
fclose($handle);
}
我有一个这样的 csv 文件:
我想删除前 3 行以及行 'Data as of',以便只有我的 table 个值。
我试过 array_shift($csv_data);
但它只删除了第一行,我该怎么做?
<?php
//Modifications on csv file
$delimiter = ";";
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
//Add columns with the name of pictures at the end of file : style_color.jpg
$data['Pictures Names'] = (!empty($data[4]) ? ($data[7] ?: '') . "_" .$data[4].'.jpg' : '');
//Delete two columns with pictures
unset($data[1]);
unset($data[2]);
$csv_data[] = $data;
$row++;
}
fclose($handle);
}
//delete fist 3 lines
array_shift($csv_data);
if (($handle = fopen($nomcsv, 'w')) !== FALSE) {
foreach ($csv_data as $data) {
fputcsv($handle, $data, $delimiter);
}
fclose($handle);
}
?>
如果我对你的问题理解正确,你想删除前三行,但只执行一次array_shift
。最简单的解决方案是使用 array_shift 函数三次。
//delete fist 3 lines
array_shift($csv_data);
array_shift($csv_data);
array_shift($csv_data);
关于删除日期:
如果它是 csv-file 中的最后一个条目(或行),您可以使用 array_pop($csv_data)
,它从数组中删除最后一个条目。
如果它不是最后一行,您可以在 while 循环中过滤它,同时填充 $csv_data
数组:
if(substr($data[0], 0, 4) === "data") {
continue;
}
$csv_data[] = $data;
这将跳过第一个单元格字符串以“数据”开头的每一行,因此它甚至不会进入 $csv_data 数组
您可以使用array_slice and array_pop
$csv_data = array_slice($csv_data, 3); // this will remove first three elements
array_pop($csv_data);// this will remove last element from array
但在你的情况下你可以跳过添加它们
$delimiter = ";";
$csv_data = array();
$row = 1;
if (($handle = fopen($nomcsv, 'r')) !== FALSE) {
while (($data = fgetcsv($handle, 10000, $delimiter)) !== FALSE) {
//Add columns with the name of pictures at the end of file : style_color.jpg
$data['Pictures Names'] = (!empty($data[4]) ? ($data[7] ?: '') . "_" . $data[4] . '.jpg' : '');
//Delete two columns with pictures
unset($data[1]);
unset($data[2]);
if ($row > 3)//start adding after third row
if (strpos($data[0], "Data as of") !== 0)//Dont add any line that starts with 'Data as of'
$csv_data[] = $data;
$row++;
}
fclose($handle);
}