2016-04-06 8 views
0

Ich habe eine Zeichenfolge mit Semi-Klonen. Ich möchte eine CSV-Datei erstellen.CSV mit fputcsv() dritten Parameter

$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), ";"); 
} 

Die fputcsv() scheint nicht richtig zu funktionieren.

Wenn ich den csv mit EXCEL öffnen, sollten die Daten in separaten Spalten sein, in denen der Semikolon (;) war.

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

EDIT:

Meine aktuelle Ausgabe und Probleme sind 1. Wenn es gibt, sind mehr als ein jene Worte von einem " (zB unten) eingewickelt werden

FRUIT;STOCKS;TYPE;"COST PER ITEM" 
  1. Die endgültige Ausgabe ist wie (wenn in Excel geöffnet).

    OBST; BESTANDTEILE; TYP "COST PER ITEM" Litschi "B-Typ A-Typ"; Inschriften; 54 $; Erdbeere; Eine Art; N/A; $ 31;

Jede ; ist in einer separaten Spalte. Ich möchte, dass die endgültige Ausgabe so sein

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

fputcsv() funktioniert sehr gut schreiben, was ist Ihr eigentliches Problem? Welches Ergebnis bekommst du? –

+1

Wenn es mehr als ein Wort in einer Spalte gibt, dann sollte es ___should___ in Anführungszeichen gesetzt werden ..... das ist, was die CSV-Spezifikation sagt, sollte passieren .... das ist __not___ ein Problem –

+0

Siehe die Bearbeitung meiner Antwort –

Antwort

1

Versuchen Sie nicht, str_getcsv() zu verwenden, um die gesamte Zeichenfolge in Zeilen zu analysieren, str_getcsv() wurde entwickelt, um eine einzelne Zeile zu analysieren, nicht der gesamte Inhalt eines Datei/string

$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, ';'); 
} 

EDIT

Es sieht aus, als ob Ihre MS Excel eher ein Komma (,) als Trennzeichen erwartet werden kann, als ein Semikolon (;) .... so können Sie muss MS Excel sagen t sein

explizit eine sep=; Linie als die erste Zeile der Datei

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

vor Ihrer Datenloop

+0

Danke. Ich habe deinen Vorschlag ausprobiert. Die Ausgabe war die gleiche wie in meinem ursprünglichen Code. Bitte sehen Sie meine Bearbeitung. – Becky

Verwandte Themen