2016-04-06 66 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