2012-04-06 6 views
5

Sto avendo un file CSV con 1 ID e-mail in ogni riga. Voglio aggiungere una virgola dopo ogni ID e-mail. Voglio aggiungere una virgola alla fine di ogni riga usando php. Come posso fare questo? C'è una funzione particolare per questo?Aggiungere una virgola alla fine di ogni riga utilizzando php

UPDATE voglio che questo in modo che possa costruire una matrice fuori di esso in javascript.

Verrà caricato il file csv utilizzando php e quindi stampato nel mio js.

Come

var myCars=[<?php print $csv; ?>]; 

In modo che io acheive qualcosa di simile.

var myCars=["[email protected]","[email protected]","[email protected]"]; 

Oppure c'è un modo migliore per farlo?

+0

Aggiungendo virgola ogni riga non lo renderebbe più un file CSV valido ??? puoi spiegare il tuo caso d'uso – Baba

+0

Voglio che sia un csv valido. – esafwan

+0

I file senza virgole sono già validi CSV. Qual è la vera natura del problema che stai vivendo? Mancato parsing? –

risposta

2

Perché non utilizzare le funzioni specifiche del csv?

$old = fopen('file.csv','r'); 
$new = fopen('new.csv','w+'); 
while($line = fgetcsv($old)) 
{ 
    fputcsv($new,$line); 
} 
fclose($old); 
fclose($new); 

Il codice qui sopra scrivere una nuova csv, linea per linea, ma se si desidera solo per generare un array JavaScript, perché non farlo:

$file = fopen ('file.csv','r'); 
$all = array(); 
while($line = fgetcsv($file)) 
{ 
    $all[] = $line[0];//if there is only 1 field/line 
    $all = array_merge($all,$line);//if multiple 
} 
fclose($file); 
$js_array = '["'.implode('",',$all).'"];'; 
//or, the way I'd advise against, but good for multi-dimensional, assoc arrays 
echo 'var array = JSON.parse("'.json_encode($all).'");'; 
5
$lines = file('file.csv'); 
foreach ($lines as & $line) { 
    $line .= ','; 
} 
file_put_contents('file.new.csv', implode(PHP_EOL, $lines)); 

una cosa del genere dovrebbe fare, applausi

+0

Attualmente la virgola sta arrivando in una nuova riga. :/C'è un modo in cui viene la fine di ogni ID di posta elettronica? – esafwan

+0

corretto, colpa mia, dovrebbe aggiungere un trim(): $ line = trim ($ line). ','; invece di $ line. = ','; – smassey

+0

ancora non funziona, posso aggiornarmi nel codice e mostrarmi? – esafwan

2
<?php 
$lines = file('org.csv'); 
foreach ($lines as & $line) { 
    $line = trim($line) . ','; 
} 
file_put_contents('new.csv', implode(PHP_EOL, $lines)); 
+1

dopo aver letto il tuo ultimo aggiornamento, direi di aggiungere questo per il JS, devi rimuovere l'ultima virgola finale dall'ultima riga in cui l'array si interromperà in JS: var myCars = []; – smassey

2

perché non solo

$csv = str_replace("\n", ",\n", $csv); 
2

Invece di echeggiare un'intera stringa csv, è possibile importare il file in un array utilizzando la funzione fgetcsv, quindi echo out utilizzando json_encode(). In questo modo sei sicuro di ottenere un array javascript valido. Inoltre citerà e codificherà qualsiasi stringa per te.

Oh, ricordarsi di eseguire l'array tramite un iteratore che eseguirà utf8_encode su tutte le stringhe. Se hai caratteri utf8 non validi, json_encode si aprirà.

Ci sono molti esempi su php.net di fare le diverse parti di questo, ma posso fornire alcuni esempi se necessario.