fputcsv:每个数组后csv文件中的空行

时间:2015-12-16 21:01:15

标签: php arrays csv

我正在尝试使用两个数组的值编写csv文件。这是代码:

<?php
fopen('output.csv','w');
$merged_fields = array_combine($authors, $ids);

$range = count($merged_fields);//gives number of elements in array
$name = array_keys($merged_fields);
$id = array_values($merged_fields);

$name = str_replace(',',', ',$name);

for ($a = 0; $a <=$range; $a++) {
    //filter out rows where id = '000000'
    if($id[$a] == '000000'){
    continue;
    }
fputcsv($fp, array_filter(array($name[$a], $id[$a])));
  }
}
fclose($fp);    
?>

如果原始数组是"Smith, John" => "888888", "Smith, Jane"=>"777777",并且下一个数组是"Jones,John"=>"999999",则每个数组后面的行后面都有一个空格,因此在csv中输出结束:

"Smith, John",888888
"Smith, Jane",777777

"Johnes, John",999999

我将使用此csv导入数据,并需要从那里获取额外的行。我已经尝试将“array_filter”应用到数组的其他部分,因为它看起来某处有一个空元素,但是没有用。

1 个答案:

答案 0 :(得分:2)

生成空白行是因为您在数组上迭代了一次太多。您将收到一些警告消息:

E_NOTICE :  type 8 -- Undefined offset: ...

但代码不会被中断,因此fputcsv将输出一个空值,从而产生空行。如果那时再次调用相同的代码以附加到生成的文件,则空行将分开两批输出。

通过替换以下行中的<=来解决此问题:

for ($a = 0; $a <= $range; $a++) {

所以你得到:

for ($a = 0; $a < $range; $a++) {

请记住,如果数组有$range个元素,则第一个元素位于索引0,最后一个元素位于索引$range-1,除非您已明确定义了数组。