我正在尝试使用两个数组的值编写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”应用到数组的其他部分,因为它看起来某处有一个空元素,但是没有用。
答案 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
,除非您已明确定义了数组。