validar separado por masiva listar leer con como comas carga buscar archivo php csv fgetcsv

php - separado - ¿Cómo analizo un archivo csv para capturar los nombres de columna primero y luego las filas que se relacionan con él?



php archivo csv (7)

¿No puedes hacer una llamada fgetcsv primero para obtener los encabezados y luego iniciar un ciclo para obtener el resto?

Modificado el ejemplo encontrado en el manual . Debe escribir una tabla con encabezados y valores a continuación.

<?php $row = 1; if (($handle = fopen(''test.csv'', ''r'')) !== FALSE) { echo ''<table>''; // Get headers if (($data = fgetcsv($handle, 1000, '','')) !== FALSE) { echo ''<tr><th>''.implode(''</th><th>'', $data).''</th></tr>''; } // Get the rest while (($data = fgetcsv($handle, 1000, '','')) !== FALSE) { echo ''<tr><td>''.implode(''</td><td>'', $data).''</td></tr>''; } fclose($handle); echo ''</table>''; } ?>

aqui esta mi csv

column1,column2,column3,column4,column5 column1_row1,column2_row1,column3_row1,column4_row1,column5_row1 column1_row2,column2_row2,column3_row2,column4_row2,column5_row2 column1_row3,column2_row3,column3_row3,column4_row3,column5_row3 column1_row4,column2_row4,column3_row4,column4_row4,column5_row4 column1_row5,column2_row5,column3_row5,column4_row5,column5_row5 column1_row6,column2_row6,column3_row6,column4_row6,column5_row6 column1_row7,column2_row7,column3_row7,column4_row7,column5_row7 column1_row8,column2_row8,column3_row8,column4_row8,column5_row8 column1_row9,column2_row9,column3_row9,column4_row9,column5_row9

primera fila son los nombres de columna, por supuesto. Intenté fgetcsv () pero todo lo que haría sería mostrar todas las filas. en lugar de lo que quiero. ¿Cómo puedo hacerlo?

así que si tuviera que colocar los datos en una matriz al final, podría imprimir un formato de tabla de los datos tal como se muestra en excel.

Gracias

esta es mi muestra

$filename = "upload/sample.csv"; if (($handle = fopen($filename, ''r'')) !== FALSE) { while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) { print_r($row); } }

esta es mi salida: (pongo la fila $ en un pre para que pueda mostrarla)

Array ( [0] => column1 [1] => column2 [2] => column3 [3] => column4 [4] => column5 column1_row1 [5] => column2_row1 [6] => column3_row1 [7] => column4_row1 [8] => column5_row1 column1_row2 [9] => column2_row2 [10] => column3_row2 [11] => column4_row2 [12] => column5_row2 column1_row3 [13] => column2_row3 [14] => column3_row3 [15] => column4_row3 [16] => column5_row3 column1_row4 [17] => column2_row4 [18] => column3_row4 [19] => column4_row4 [20] => column5_row4 column1_row5 [21] => column2_row5 [22] => column3_row5 [23] => column4_row5 [24] => column5_row5 column1_row6 [25] => column2_row6 [26] => column3_row6 [27] => column4_row6 [28] => column5_row6 column1_row7 [29] => column2_row7 [30] => column3_row7 [31] => column4_row7 [32] => column5_row7 column1_row8 [33] => column2_row8 [34] => column3_row8 [35] => column4_row8 [36] => column5_row8 column1_row9 [37] => column2_row9 [38] => column3_row9 [39] => column4_row9 [40] => column5_row9 )


Hice esta solución rápida utilizando fgetcsv, funciona bien y es más fácil de leer y entender. Entonces todo el resultado se guarda en la matriz $ csv

$csv = array(); $i = 0; if (($handle = fopen($upload[''file''], "r")) !== false) { $columns = fgetcsv($handle, 1000, ","); while (($row = fgetcsv($handle, 1000, ",")) !== false) { $csv[$i] = array_combine($columns, $row); $i++; } fclose($handle); }


Modifiqué la primera respuesta para manejar mejor diferentes separadores de columnas.

if (($handle = fopen("hdbsource/products_stock.csv", "r")) !== FALSE) { while (($csv[] = fgetcsv($handle, 1000, '','')) !== FALSE) {} fclose($handle); } $keys = array_shift($csv); foreach ($csv as $i=>$row) { $csv[$i] = array_combine($keys, $row); }


Para leer todo de una vez puedes usar:

$csv = array_map("str_getcsv", file("file1.csv",FILE_SKIP_EMPTY_LINES)); $keys = array_shift($csv);

Para convertir todas las filas en una buena matriz asociativa, entonces podría aplicar:

foreach ($csv as $i=>$row) { $csv[$i] = array_combine($keys, $row); }


Parece que podría estar tomando todo como una sola línea. ¿Tal vez su csv tiene una línea diferente que termina? Al menos eso es lo que parece en tu salida. Si observa la fila 1, la columna 5 en la matriz de resultados, contiene un final de línea y la columna 1 en la fila 2. Y lo mismo en el resto. Lo lee todo en una sola línea.

Nota: si PHP no reconoce correctamente los finales de línea cuando lee archivos en una computadora Macintosh o los crea en ellos, habilitar la opción de configuración en tiempo de ejecución auto_detect_line_endings puede ayudar a resolver el problema. - fgetscv

¿En qué plataforma estás? De cualquier manera, verifique los finales de línea.


intente usar str_getcsv - Analice una cadena CSV en una matriz

debe resolver su problema ...


// Opening the file for reading... $fp = fopen(''path_to_your_file.csv'', ''r''); // Headrow $head = fgetcsv($fp, 4096, '';'', ''"''); // Rows while($column = fgetcsv($fp, 4096, '';'', ''"'')) { // This is a great trick, to get an associative row by combining the headrow with the content-rows. $column = array_combine($head, $column); echo $column[''column1'']; }