2010-01-02 138 views
0

我想創建一個CSV文件。我已經做到了。我已經把下面的代碼放在循環之外的第一行和最後一行。寫入到CSV文件上的兩列

$FileHandle = fopen('tech.csv', 'a+') or die("can't open file"); 
$stringa = $item." , ".$item2."\r\n"; 
fwrite($FileHandle, $stringa); 
fclose($FileHandle); 

但是,它出來像這樣的CSV文件:

a 
b 

c 
d 

,而不是這樣,我想它:

a b 
c d 

基本上,兩列,而不是一個。

我在做什麼錯?

+2

哪裏$項目和$ ITEM2來自 - 因爲它看起來像他們已經有一個回車。 – menkes 2010-01-02 00:27:36

+0

這正是問題所在。 – Abs 2010-01-02 00:36:23

回答

3

你使用fgets()文件/流中讀取這些值?然後,尾隨換行符是字符串的一部分。使用trim()刪除換行符。

您可能也有興趣在功能fputcsv()

+0

神奇,修剪做到了這一點。該字符串來自網頁,我可以想象它有一個尾部換行符。感謝VolKerK。 :) – Abs 2010-01-02 00:35:19

3

我真的希望你不要打開和關閉文件在每次迭代爲使文件系統中的實際壓力。相反,你可以做這樣的事情:

$csv = array(); 
foreach($myData as $row) { 
    $csv[] = trim($row['item1']).','.trim($row['item2']); 
} 
file_put_contents('tech.csv', implode("\r\n", $csv), FILE_APPEND); 

或者,你可以使用fputcsv功能:

$fp = fopen('tech.csv', 'a+'); 
foreach($myData as $row) { 
    fputcsv($fp, array(trim($row['item1']), trim($row['item2'])); 
}  
fclose($fp); 
+0

在OP的代碼示例追加到現有文件('一個+'),而該代碼覆蓋任何是存在的。 – nickf 2010-01-02 00:31:28

+0

@nickf,我懷疑這是因爲如果我正確地理解了他,他在每次迭代中都會打開和關閉,但我更改了示例,以便它們追加以避免混淆。 – 2010-01-02 00:32:38

+0

我不打開或合環!我說我把第一條線和第二條線放在我的問題之外。 :) – Abs 2010-01-02 00:38:35