2011-10-06 28 views
5

Estoy tratando de determinar cuántas columnas tiene un archivo csv.PHP fgetcsv() - encuentre el número de columnas

Aquí está mi script, que solo está utilizando la primera columna, pero estoy un poco ciego. Quiero colocar una variable que limite el recuento de columnas. (Puesto que se pueden cometer un error y agregar una columna, o incluso perder una columna)

<?php 
$allowedColNum=5; 
$batchcount=0; 
$file = fopen($file_name, "r"); 
while ($line = fgetcsv($file)){ 
/* I want to stop the loop if the $allowedColNum is not correct */     
    $col = $line[0]; 
    echo $batchcount++.". ".$col."\n"; 
} 

fclose($file); 
?> 

Estoy seguro de que es una de esas cosas fáciles fáciles que ahora no recibo.

Respuesta

13

Si lo entiendo, simplemente necesita count($line), porque fgetcsv() ha devuelto una matriz que representa una fila del archivo CSV. Por lo tanto, la matriz count() es la cantidad de columnas fuente.

while ($line = fgetcsv($file)){ 

    // count($line) is the number of columns 
    $numcols = count($line); 

    // Bail out of the loop if columns are incorrect 
    if ($numcols != $allowedColNum) { 
    break; 
    } 
    $col = $line[0]; 
    echo $batchcount++.". ".$col."\n"; 
} 
+0

veo! Creo que me estaba confundiendo con encontrar los $ numcols antes vs después de obtener filas individuales. Imagino que no es así como funciona, ya que tal vez una fila específica tenga un número de columna diferente al resto en el mismo archivo. Pero honestamente estoy asumiendo eso, ya que soy nuevo con los archivos. – coffeemonitor

0

¡No probado, pero debería funcionar!

$allowedColNum=5; 
$batchcount=0; 
$file = fopen($file_name, "r"); 
$totCols=0; 
while ($line = fgetcsv($file)) 
if(count($line) > $totCols) $totCols = count($line); 
fseek($file, 0); 
while ($line = fgetcsv($file)) 
{ 
    //.... 
} 
fclose($file); 

edición: probado, trabajando hacer fseek (0) en lugar de guardar los valores de una matriz: será mucho más rápido

0

Michael Berkowski trabajo fino respuesta para mí, pero en mi caso, también tuvo que especificar el separador csv en la llamada a la función fgetcsv(). Es Coma "," de forma predeterminada, lo cambio a punto y coma ";". De esta manera:

tiempo (línea $ = fgetcsv ($ archivo, 0, ';')) {

Cuestiones relacionadas