CSV与fputcsv()第三个参数

时间:2016-04-06 09:09:46

标签: php

我有一个包含半克隆的字符串。我想创建一个csv文件。

$fp = fopen("abc.csv", "w");
$str = "FRUIT; STOCKS; TYPE\n lychee; B-type,A-type; instocks\n strawberry; A-type;N/A\n";

$rows = str_getcsv($str, PHP_EOL);
foreach($rows as $row) {
    $data = str_getcsv($row);
    fputcsv($fp, explode(';',$data), ";");
}

fputcsv()似乎无法正常工作。

当我使用EXCEL打开csv时,数据应该位于半冒号(;)所在的单独列中。

FRUIT       TYPE           STOCKS
Lychee      B-type,A-type  instocks
Strawberry  A-type         N/A

编辑:

我目前的输出和问题是  1.如果有多个单词被"包裹(例如下面)

FRUIT;STOCKS;TYPE;"COST PER ITEM"
  1. 最终输出为(在excel中打开时)。

    水果;股票;类型;"每件商品的成本" 荔枝" B型A型&#34 ;; instocks; $ 54, 草莓;一种; N / A; $ 31日;

  2. 每个;都在一个单独的列中。我希望最终输出像这样

    FRUIT       TYPE           STOCKS    COST PER ITEM
    Lychee      B-type,A-type  instocks  $54
    Strawberry  A-type         N/A       $31
    

1 个答案:

答案 0 :(得分:1)

不要尝试使用str_getcsv()将整个字符串解析为行,str_getcsv()旨在解析单个行,而不是文件/字符串的整个内容

$str = "FRUIT; STOCKS; TYPE\n lychee; B-type,A-type; instocks\n strawberry; A-type;N/A\n";

$rows = explode("\n", $str);

foreach($rows as $row) {
    $data = str_getcsv($row, ';');
    $data = array_map('trim', $data);
    fputcsv($fp, $data, ';');
}

修改

好像你的MS Excel可能期望逗号(,)作为分隔符而不是分号(;)....所以你可能需要告诉MS Excel这个

明确地将sep=;行写为文件的第一行

fwrite($fp, 'sep=;'.PHP_EOL);
在数据循环之前