【问题标题】:Delete CSV row for matching record删除匹配记录的 CSV 行
【发布时间】:2019-04-04 09:50:01
【问题描述】:

我需要匹配数组的 ID 和 CSV 文件的行 ID,如果匹配则从 CSV 文件中删除该特定行,否则文件数据将保持不变。

代码如下:

if (($handle = fopen("$filename_with_path", "w")) !== FALSE)                
{                                                                              
    while (($data[1] = fgetcsv($handle, 1000, ",")) !== FALSE)                 
    {                                                                          

        if(in_array($data[1],$del_tag_array)){                                 
            unset($data);                                                      

        }   else {                                                             
            $tag_data_from_csv[]=$data;                                        
        }                                                                      

    }                                                                          
    fclose($handle);                                                           
}                                                                              
foreach ($tag_data_from_csv as $data_at_each_index)                            
{                                                                              
    fputcsv($file_pointer, $data_at_each_index) or die('cannot write file');
}

CSV文件记录:

row1 = 1,714,pictures,222 row2 = 1,713,unique,222

如果 713 = 713,则应从 CSV 中删除包含 713 的行

【问题讨论】:

    标签: php csv row


    【解决方案1】:

    这样的事情呢?

    #!/usr/bin/env php                                                              
    <?php                                                                           
    $filename_with_path = '/tmp/input.csv';                                         
    $del_tag_array = [713];                                                         
    $tag_data_from_csv = [];                                                        
    
    if ($handle = fopen($filename_with_path, "r")) {                                
        while ($data = fgetcsv($handle, 1000, ",")) {                               
            if (in_array($data[1], $del_tag_array)){                                
                continue;                                                           
            }                                                                       
            $tag_data_from_csv[] = $data;                                           
        }                                                                           
    }                                                                               
    fclose($handle);                                                                
    if ($handle = fopen($filename_with_path, "w")) {                                
        foreach ($tag_data_from_csv as $data_at_each_index)                         
        {                                                                           
            fputcsv($handle, $data_at_each_index) or die('cannot write file');         
        }                                                                           
    }                                                                               
    fclose($handle);
    

    棘手的部分是:

    • 模式,打开文件句柄的方式:见表格 mode here。 (通过'w' 打开,您只需将其擦除,因此没有可读取的行)
    • 您将 csv 中的所有行放入数据数组的一个索引中,使其 多级数组,而不是仅仅检索某个值 位置
    • 未定义的写入句柄和带有要跳过的键的数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      相关资源
      最近更新 更多