【问题标题】:why fputcsv produce extra blank column in csv为什么 fputcsv 在 csv 中产生额外的空白列
【发布时间】:2015-06-03 12:43:01
【问题描述】:

我正在尝试从我的 csv 中删除不必要的列。我所做的是从当前 csv 读取并使用 fputcsv 生成一个新的。但是,由于 fputcsv 在$data[21] 之前添加了额外的空白列,因此数据混乱。下面是我的代码

$file_path = 'test.csv';
$file_output = 'new.csv';
if (file_exists($file_path) && filesize($file_path) > 0) {
    if (false !== ($read_file = fopen($file_path, 'r'))) {
        $output_file = fopen($file_output, 'w');
        while (false !== ($data = fgetcsv($read_file))) {
            $outputData = array($data[1], $data[6], $data[19], $data[20],
                $data[21]);
            fputcsv($output_file, $outputData);

        }

    }
    fclose($read_file);
    fclose($output_file);

}

【问题讨论】:

  • 所有引用的数组位置都存在吗? var_dump 以确保 100% 确定
  • 是的,我做到了...写入 csv 之前的数组位置是正确的。我手动将其 var_dump 出来并检查。谢谢。
  • 您能否发布一个正在输出的 CSV 数据示例?
  • "Gaash Lighting Ltd",G2,"Kibbutz Gaash",,,""
  • 哎呀...你的 PHP 显示放置 5 列,但输出是 8 列。您是否确保在运行之间删除了输出文件 (new.csv)?

标签: php csv fputcsv


【解决方案1】:

从不同的列数来看,在您运行代码之前似乎需要删除该文件。您可能想在执行开始时unset 文件。

if (file_exists($file_output)) {
    unset($file_output);
}

// continue with getting and populating CSV

【讨论】:

    【解决方案2】:

    希望你在这里提到了正确的数组序列:

     $outputData = array($data[1], $data[6], $data[19], $data[20], 
                              $data[21]);
    

    如果未找到/定义数据索引,则 fputcsv() 将在新 csv 中添加额外的列。

    【讨论】:

    • 您好,我所做的是 var_dump $data 变量,因此我可以看到数组中的指向并在数组中选择必要的位置来写出。因此,我在上面选择的列之一是没有定义的。很奇怪
    • 然后这样做:while(false !== ($data = fgetcsv($read_file))){ $outputData[0] = $data[1]; $输出数据[1] = $数据[6]; $输出数据[2] = $数据[19]; $输出数据[3] = $数据[20]; $输出数据[4] = $数据[21]; } fputcsv($output_file, $outputData);
    • 当然……那我试试
    • 最后一列也附加了“并且在新行中附加了另一个”..这太奇怪了,我以前从未见过这种情况
    • 真的很奇怪!!尝试添加 ini_set("auto_detect_line_endings", true);
    猜你喜欢
    • 2023-04-03
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多