2016-04-06 72 views
0

我得到一个字符串与半克隆。我想创建一个csv文件。CSV与fputcsv()第三个参数

$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" 
  • 最终输出为(在Excel中打开时)。

    水果;库存;类型;“每件物品的成本” 荔枝“B型A型”; instocks; $ 54, 草莓;一种; N/A; $ 31日;

  • 每个;是在一个单独的列。我想最后的输出是这样

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

    fputcsv()工作得很好,你有什么实际问题?你得到什么结果? –

    +1

    如果一列中有多个单词,那么它___应该用引号括起来......这就是CSV规范所说的应该发生的事情......这是__not___问题 –

    +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 t他

    明确写入一个sep=;线作为文件

    fwrite($fp, 'sep=;'.PHP_EOL); 
    

    的第一行数据循环之前

    +0

    谢谢。我尝试了你的建议。输出与我原来的代码相同。请参阅我的编辑。 – Becky