2015-12-16 77 views
2

我正在嘗試使用兩個數組中的值編寫csv文件。下面的代碼:fputcsv:在每個陣列之後在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

我不確定,但我認爲這可能是預期的行爲。 'fputcsv'將以每個文檔的新行字符結束,所以考慮到這一點,似乎期望每個循環包含'fputcsv'函數。 – camelCase

+0

您可以在打開文件的位置添加代碼嗎?循環中有一個錯誤(你應該得到一個錯誤):在'for'循環中'$ a <= $ range'應該是'$ a <$ range'。另外變量'$ id'還有一點是未定義的。它應該是'$ empid'嗎? – trincot

+0

@trincot - 我清理了這些變量,爲了清晰起見我改變了它們,並留下了一對夫婦。當我運行我的代碼時,它們都是正確的。我添加了一個fopen語句。當超出數組範圍時,我會在$ a變量中獲取未定義值的「通知」。 – mattrweaver

回答

2

空行會產生,因爲您在陣列上迭代了太多次。你將不得不像這幾個警告信息:

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

但代碼將不會被通過fputcsv中斷,因此空值將被輸出,導致空行。如果您再次調用相同的代碼以附加到生成的文件,則空行將分隔兩批輸出。

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

這樣就可以獲得:

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

記住,如果陣列有$range元件,所述第一元件是在索引0,通過在下面的行替換<=

修復此最後在索引$range-1,除非你有明確定義你的數組。

相關問題