web-dev-qa-db-fra.com

Afficher dynamiquement un fichier CSV sous forme de tableau HTML sur une page Web

Je voudrais prendre un fichier CSV vivant côté serveur et l'afficher dynamiquement comme une table html. Par exemple, ceci:

Name, Age, Sex
"Cantor, Georg", 163, M

devrait devenir ceci:

<html><body><table>
<tr> <td>Name</td> <td>Age</td> <td>Sex</td> </tr>
<tr> <td>Cantor, Georg</td> <td>163</td> <td>M</td> </td>
</table></body></html>

Les solutions dans toutes les langues sont les bienvenues.

29
dreeves

solution précédemment liée est un horrible morceau de code; presque chaque ligne contient un bug. Utilisez fgetcsv à la place:

<?php
echo "<html><body><table>\n\n";
$f = fopen("so-csv.csv", "r");
while (($line = fgetcsv($f)) !== false) {
        echo "<tr>";
        foreach ($line as $cell) {
                echo "<td>" . htmlspecialchars($cell) . "</td>";
        }
        echo "</tr>\n";
}
fclose($f);
echo "\n</table></body></html>";
89
phihag

Voici une fonction simple pour convertir csv en table html en utilisant php:

function jj_readcsv($filename, $header=false) {
$handle = fopen($filename, "r");
echo '<table>';
//display header row if true
if ($header) {
    $csvcontents = fgetcsv($handle);
    echo '<tr>';
    foreach ($csvcontents as $headercolumn) {
        echo "<th>$headercolumn</th>";
    }
    echo '</tr>';
}
// displaying contents
while ($csvcontents = fgetcsv($handle)) {
    echo '<tr>';
    foreach ($csvcontents as $column) {
        echo "<td>$column</td>";
    }
    echo '</tr>';
}
echo '</table>';
fclose($handle);
}

On peut appeler cette fonction comme jj_readcsv('image_links.csv',true);

si le second paramètre est vrai, la première ligne de csv sera prise comme en-tête/titre.

J'espère que cela aide quelqu'un. Veuillez commenter les défauts de ce code.

13
Joby Joseph

la réponse de phihag place chaque ligne dans une seule cellule, tandis que vous demandez que chaque valeur soit dans une cellule distincte. Cela semble le faire:

<?php
// Create a table from a csv file 
echo "<html><body><table>\n\n";
$f = fopen("so-csv.csv", "r");
while (($line = fgetcsv($f)) !== false) {
        $row = $line[0];    // We need to get the actual row (it is the first element in a 1-element array)
        $cells = explode(";",$row);
        echo "<tr>";
        foreach ($cells as $cell) {
            echo "<td>" . htmlspecialchars($cell) . "</td>";
        }
        echo "</tr>\n";
}
fclose($f);
echo "\n</table></body></html>";
?>
4
user3257572