2010-01-02 135 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