【问题标题】:PHP use the fputcsv CSV to write same data in column for each rowPHP 使用 fputcsv CSV 在每一行的列中写入相同的数据
【发布时间】:2014-11-21 08:41:06
【问题描述】:

我正在尝试为 CSV 的每一行添加一个新数据“示例”。 csv 的行各不相同。标题列名称为 ExampleRow 没有分隔符,只有一个分隔符,即分号。

我正在使用 fputcsv,它必须有一个数组来用所需的数据填充 csv 文件。但在我的情况下,每个 csv 的行数都会发生变化。

到目前为止,它添加了新列,但我不明白如何在该列的每一行中放置相同的值?

<?php
$newCsvData = array(); // here should I specify the same data value "exemple data" for each line ? but how ?

if (($handle = fopen("exemple.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 9999, ";")) !== FALSE) {
        $data[] = 'ExempleRow';
        $newCsvData[] = $data;
    }
    fclose($handle);
}

$handle = fopen('exemple.csv', 'w');

foreach ($newCsvData as $line) {
   fputcsv($handle, $line,';',' ');
}

fclose($handle);

?> 

【问题讨论】:

  • 为什么每个 CSV 更改的行数会成为问题?您一次添加一行。还是您的意思是每行都有不同数量的列?
  • 不抱歉,我的问题具有误导性。基本上我需要为标题添加一个带有标题的列,并为每一行填充相同的值。现在整个列(包括标题标题)都填充了该值。我需要标题有一个标题,如:“标题标题”和列的其余部分,“我的每一行的值”。

标签: php arrays csv while-loop fgetcsv


【解决方案1】:

如果您想将数组的键显示为第一列,那么您可以这样做。如果您没有关联数组,或者出于任何原因想要对列标题进行硬编码,您只需将 array_keys($line) 更改为硬编码数组即可。

$handle = fopen('exemple.csv', 'w');
$keys = false;

foreach ($newCsvData as $line) {
   if ($keys === false) {
       //$header = array('HeaderOne', 'HeaderTwo', 'HeaderThree', 'HeaderFour'); Use this if you want to hard code your headers
       fputcsv($handle, array_keys($line), ';', '');
       $keys = true;
   }
   fputcsv($handle, $line,';',' ');
}

fclose($handle);

【讨论】:

  • 谢谢你,我会研究你的代码并学习更多关于 PHP 中数组的可能性,因为我还有很多东西要学!问候
  • 欢迎您。请问您为什么使用分号而不是逗号?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
  • 2017-12-04
相关资源
最近更新 更多