【问题标题】:Write to a CSV file on two columns在两列上写入 CSV 文件
【发布时间】:2010-01-02 00:23:26
【问题描述】:

我正在尝试创建一个 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

基本上是两列而不是一列。

我做错了什么?

【问题讨论】:

  • $item 和 $item2 是从哪里来的——因为看起来他们已经有回车了。
  • 这正是问题所在。

标签: php file csv


【解决方案1】:

您是否使用fgets() 从文件/流中读取这些值?然后尾随换行符是字符串的一部分。使用trim() 删除换行符。

您可能还对函数fputcsv() 感兴趣。

【讨论】:

  • 太棒了,修剪完成了这项工作。该字符串来自网页,我可以想象它有一个尾随换行符。感谢 VolKerK。 :)
【解决方案2】:

我真的希望您不要在每次迭代中打开和关闭文件,因为这会给文件系统带来真正的压力。相反,您可以这样做:

$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);

【讨论】:

  • OP 中的代码示例附加到现有文件 (a+),而此代码会覆盖其中的任何内容。
  • @nickf,我怀疑这是因为如果我理解正确的话,他会在每次迭代中进行打开和关闭,但我更改了我的示例,以便将它们附加以避免混淆。
  • 我不是在循环中打开或关闭!我说我在我的问题中将第一行和第二行放在循环之外。 :)
猜你喜欢
  • 1970-01-01
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
相关资源
最近更新 更多