parser fputs crear array php html csv

php - fputs - Visualice dinámicamente un archivo CSV como una tabla HTML en una página web



php html parser (7)

Me gustaría tomar un archivo CSV que viva del lado del servidor y mostrarlo dinámicamente como una tabla html. Por ejemplo, esto:

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

debería convertirse en esto:

<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>

Las soluciones en cualquier idioma son bienvenidas.


¿Funciona si escapas de las comillas con /?

Nombre, Edad, Sexo

"Cantor /, Georg", 163, M

La mayoría de los formatos delimitados requieren que se escape su delimitador para poder analizar correctamente.

Un ejemplo aproximado de Java:

import java.util.Iterator; public class CsvTest { public static void main(String[] args) { String[] lines = { "Name, Age, Sex", "/"Cantor, Georg/", 163, M" }; StringBuilder result = new StringBuilder(); for (String head : iterator(lines[0])) { result.append(String.format("<tr>%s</tr>/n", head)); } for (int i=1; i < lines.length; i++) { for (String row : iterator(lines[i])) { result.append(String.format("<td>%s</td>/n", row)); } } System.out.println(String.format("<table>/n%s</table>", result.toString())); } public static Iterable<String> iterator(final String line) { return new Iterable<String>() { public Iterator<String> iterator() { return new Iterator<String>() { private int position = 0; public boolean hasNext() { return position < line.length(); } public String next() { boolean inquote = false; StringBuilder buffer = new StringBuilder(); for (; position < line.length(); position++) { char c = line.charAt(position); if (c == ''"'') { inquote = !inquote; } if (c == '','' && !inquote) { position++; break; } else { buffer.append(c); } } return buffer.toString().trim(); } public void remove() { throw new UnsupportedOperationException(); } }; } }; } }


Aquí hay una función simple para convertir csv en tabla html usando 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); }

Se puede llamar a esta función como jj_readcsv(''image_links.csv'',true);

si el segundo parámetro es verdadero, la primera fila de csv se tomará como encabezado / título.

Espero que esto ayude a alguien. Comente por cualquier error en este código.



La solución previamente vinculada es una horrible pieza de código; casi cada línea contiene un error. Use fgetcsv en fgetcsv lugar:

<?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>";


La respuesta de phihag pone cada fila en una sola celda, mientras que usted está pidiendo que cada valor esté en una celda separada. Esto parece hacerlo:

<?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>"; ?>


XmlGrid.net tiene una herramienta para convertir csv a html table. Aquí está el enlace: http://xmlgrid.net/csvToHtml.html

Usé sus datos de muestra y obtuve la siguiente tabla html:

<table> <!--Created with XmlGrid Free Online XML Editor (http://xmlgrid.net)--> <tr> <td>Name</td> <td> Age</td> <td> Sex</td> </tr> <tr> <td>Cantor, Georg</td> <td> 163</td> <td> M</td> </tr> </table>


definir "mostrarlo dinámicamente"? eso implica que la tabla se está construyendo a través de javascript y algún tipo de actualización Ajax-y ... si solo quieres construir la tabla usando PHP eso no es realmente lo que yo llamaría ''dinámico''