如何从php中的csv文件中删除特定行?

时间:2020-10-12 10:02:00

标签: php csv fputcsv

我有一个这样的csv文件: enter image description here

我想删除前3行以及“数据截止日期”行,以仅保留我的值表。

我尝试了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);
}


?>

2 个答案:

答案 0 :(得分:2)

您可以使用array_slicearray_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);
}

答案 1 :(得分:1)

如果我正确理解了您的问题,则希望删除前三行,但只执行一次capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true) 。最简单的解决方案是使用array_shift函数三次。

capabilities.setCapability(org.openqa.selenium.remote.CapabilityType.ACCEPT_SSL_CERTS, true)

关于删除日期: 如果它是csv文件中的最后一个条目(或行),则可以使用array_shift,它会从数组中删除最后一个条目。 如果不是最后一行,则可以在填充//delete fist 3 lines array_shift($csv_data); array_shift($csv_data); array_shift($csv_data); 数组的同时,在while循环中对其进行过滤:

array_pop($csv_data)

这将跳过第一个单元格字符串以“ data”开头的每一行,因此它甚至都不会进入$ csv_data数组