2011-12-20 12 views
8

Tengo un problema con la lectura de un archivo delimitado por tabulaciones.¿Cómo crear una matriz estructurada desde un archivo de Tabdelimited con PHP?

La estructura en mi archivo es:

Field 1  Field 2  Field 3 
Element11 Element12 Element13 
Element21 Element22 Element23 
Element31 Element32 Element33 

A partir de este archivo que desea crear una matriz con esta estructura:

$csv = array(
      array( 'Field 1' => 'Element11', 
        'Field 2' => 'Element12', 
        'Field 3' => 'Element13', 

      ), 
      array( 'Field 1' => 'Element21', 
        'Field 2' => 'Element22', 
        'Field 3' => 'Element23', 

      ), 
      array( 'Field 1' => 'Element31', 
        'Field 2' => 'Element32', 
        'Field 3' => 'Element33', 

      )  
     ); 

¿Cómo puedo hacer esto?

Respuesta

17

también para obtener las cabeceras como claves de matriz que necesita

$result = array(); 
$fp = fopen('/path/to/file','r'); 
if (($headers = fgetcsv($fp, 0, "\t")) !== FALSE) 
    if ($headers) 
    while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) 
     if ($line) 
     if (sizeof($line)==sizeof($headers)) 
      $result[] = array_combine($headers,$line); 
fclose($fp); 
print_r($result); 
1

fgetcsv():

$result = array(); 
$fp = fopen('/path/to/file','r'); 
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) if ($line) $result[] = $line; 
fclose($fp); 

print_r($result); 

Si desea omitir la fila de encabezado, simplemente llame fgets() una vez antes de entrar en el bucle. O si desea que la matriz sea asociativa como se representa anteriormente:

$result = array(); 
$fp = fopen('/path/to/file','r'); 
$headers = fgetcsv($fp, 0, "\t"); 
$row = 0; 
while (($line = fgetcsv($fp, 0, "\t")) !== FALSE) if ($line) { 
    for ($col = 0; isset($line[$col]); $col++) { 
    $result[$row][$header[$col]] = $line[$col]; 
    } 
    $row++; 
} 
fclose($fp); 

print_r($result); 
+0

En realidad, el archivo no es [C] OMMA [S] eperated (CSV) :) – tim

+2

CSV se ha convertido en sinónimo de ... bueno, "datos separados por algo", y como compañero de trabajo en los días solía decir; –

+0

@ColHeather Es por eso que suministré ' "\ t" 'como tercer parámetro a' fgetcsv "Carácter" Valores separados() '... :-D – DaveRandom

Cuestiones relacionadas