取消设置行(基于行名)csv通过php [英] Unset rows (based on row name) csv through php

查看:118
本文介绍了取消设置行(基于行名)csv通过php的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个带有静态列名的.CSV文件。



第一行是行名称,例如:row1; row2; row3,row4,



如何取消设置row2和row4基于名称?多个行?



我发现了一些基于行位置删除行或行的教程,但没有什么可以帮助我完全。



这是现在有什么:

  $ inFile ='original.csv'; 
$ outFile ='edited.csv';

$ delimiter =';';
$ enclosure ='';

$ read = fopen($ inFile,'r');
$ write = fopen($ outFile,'w');
if($ write& $ read){
while(($ data = fgetcsv($ read))!== FALSE){

//如何取消多行名

fputcsv($ write,$ data,$ delimiter,$ enclosure);
}
}
fclose($ write);
fclose($ read);

此外,我需要使用分隔符和机箱原始文件?

解决方案

您可以尝试更新以下代码:

  $ inFile ='original.csv'; 
$ outFile ='edited.csv';
$ delimiter ='; ;
$ enclosure ='';
$ removeFields = array('color');

$ write = fopen($ outFile,'w');

if($ write){
$ rows = file($ inFile);
$ first = false;
foreach($ rows as $ row){
$ csvToPHP = str_getcsv($ row,$ delimiter,$ enclosure);
if(!$ first){
$ headers = array_flip($ csvToPHP);
$ first = true;
}

foreach($ removeFields as $ remove){
unset($ csvToPHP [$ headers [$ remove]]);
}
fputcsv($ write,$ csvToPHP,$ delimiter,$ enclosure);
}
}
fclose($ write);

我使用测试csv original.csv:

  name,age,color 
test1,20,red
test2,32,blue
test3,92,green
test4, 12,red
test5,56,orange

结果edited.csv:

 名称
test1
test2
test3
test4
test5

希望它有帮助。祝你好运!


I have a .CSV file with static column names. I receive it daily so i have to automatically edit it on a daily base.

On the first line are the row names for example: row1;row2;row3,row4,row5

for example when i want to unset "row2" and "row4".

How can i unset multiple rows based on a name?

I found a some tutorials about deleting lines or rows based on a row position but nothing that helps me completely.

This is what is have now:

$inFile  = 'original.csv';
$outFile = 'edited.csv';

$delimiter = ';';
$enclosure = '"';   

$read = fopen($inFile, 'r');
$write = fopen($outFile, 'w');
if ($write && $read) {
    while (($data = fgetcsv($read)) !== FALSE) {

        // how to unset multiple row names

        fputcsv($write, $data, $delimiter, $enclosure);
    }
}
fclose($write);
fclose($read);

Also, do i need to use the delimiter and enclosure when i fopen the original file?

解决方案

Hi you can try the updated following code:

$inFile  = 'original.csv';
$outFile = 'edited.csv';
$delimiter = ';';
$enclosure = '"';   
$removeFields = array('color');

$write = fopen($outFile, 'w');

if ($write) {
    $rows = file($inFile);
    $first = false;
    foreach($rows as $row) {
        $csvToPHP = str_getcsv($row, $delimiter, $enclosure);
        if (!$first) {
            $headers = array_flip($csvToPHP);
            $first = true;
        }

        foreach($removeFields as $remove) {
            unset($csvToPHP[$headers[$remove]]);
        }
        fputcsv($write, $csvToPHP, $delimiter, $enclosure);
    }   
}
fclose($write);

I used a test csv original.csv:

name,age,color
test1,20,red
test2,32,blue
test3,92,green
test4,12,red
test5,56,orange

Result edited.csv:

name
test1
test2
test3
test4
test5

Hope it helps. Good luck!

这篇关于取消设置行(基于行名)csv通过php的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆