2011-03-14 6 views
1

je le script PHP suivant qui lit à partir de deux fichiers CSV, au moment où je mettais les données dans une table mais je besoin à la sortie dans un fichier CSV ...sortie PHP au format CSV

<?php 

$products_file = fopen('Products.csv', 'r'); 
$manufacturers_file = fopen('Manufacturers.csv', 'r'); 

$manufacturers = array(); 

while (($manufacturers_line = fgetcsv($manufacturers_file)) !== FALSE) { 

    $manufacturers[$manufacturers_line[0]] = $manufacturers_line [1]; 

    } 

echo '<table><tr><th>SKU</th><th>Make and Model</th><th>Make and Model</th></tr>'; 

while (($products_line = fgetcsv($products_file)) !== FALSE) { 

    echo '<tr><td>'.$products_line[3].'</td><td>'; 

    echo $manufacturers[$products_line[5]]; 

    echo '</td><td>'.$products_line[4].'</td></tr>'; 
} 

echo '</table>'; 

fclose($products_file); 
fclose($manufacturers_file); 

?> 

Comment puis-je faire cela en utilisant fputcsv?

+1

http://php.net/manual/fr/function.fputcsv.php est tout ce dont vous avez besoin. La fonction prend un handle de fichier et un tableau est sauvegardé dans votre fichier sur une ligne. –

Répondre

2

Je vous suggère ceci:

$outfile = fopen('output.csv', 'w'); 

while (($products_line = fgetcsv($products_file)) !== FALSE 
     && fputcsv(
     array($products_line[3], $manufacturers[$products_line[5]], $products_line[4] 
    ) !== FALSE) { 
    echo '<tr><td>'.$products_line[3].'</td><td>'; 
    echo $manufacturers[$products_line[5]]; 
    echo '</td><td>'.$products_line[4].'</td></tr>'; 
} 

Tout d'abord, un nouveau tableau est créé avec
array($products_line[3], $manufacturers[$products_line[5]], $products_line[4]. Ensuite, ce tableau est envoyé à fputcsv().

Le code ci-dessus sort à la fois de csv et de html. Supprimez le echo si vous ne voulez pas de sortie html.

+0

Merci beaucoup fonctionne parfaitement –

3

On dirait que vous avez juste besoin de changer où elle rend la table html pour l'écrire dans un fichier csv comme celui-ci à partir de la documentation PHP: -

$fp = fopen('newfile.csv', 'w'); 

while (($products_line = fgetcsv($products_file)) !== FALSE) 
{ 
    fputcsv($fp, $products_line); 
} 

fclose($fp); 

Hope qui aide.

Rick.

+0

Notez que cela va produire des valeurs différentes de ce qui est dans votre tableau html. –

+0

Cela est vrai car il sortira simplement la ligne entière mais cela dépend des données qu'il veut imprimer. Il peut facilement être modifié comme vous l'avez fait en créant un nouveau tableau. –

+0

Ta très Richard, j'ai fini par utiliser ça à la fin ... gentil! –

3

Vous pouvez aussi le faire de cette façon:

Declare $ csv en dehors de votre boucle while:

$csv = ''; 

Ensuite, dans votre boucle while remplir la variable:

$csv .= $products_line[3].','.$manufacturers[$products_line[5]].','.$products_line[4]."\n"; 

Puis, une fois à l'extérieur votre boucle, vous pouvez écrire $ csv dans un fichier:

$myFile = 'testFile.csv'; 
$fh = fopen($myFile, 'w') or die('cannot open file'); 
fwrite($fh, $csv); 
fclose($fh); 

Terminé!

note la guillemie autour du \ n. Si vous utilisez des guillemets simples, le caractère \ n n'aura pas le résultat attendu.

+0

C'est effrayant - regardez votre et mon nom et la réputation ... –

+0

@Martin: Je sais !! – Martin

+0

+1 pour une double citation autour du \ n - je n'aurais pas pensé à ça! –