2011-12-20 4 views
8

Ho un problema con la lettura di un file delimitato da tabulazioni.Come creare un array strutturato da un file Tabdelimited con PHP?

La struttura sul mio file è:

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

Da questo file Voglio creare un array con questa struttura:

$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', 

      )  
     ); 

Come posso fare questo?

risposta

17

Per ottenere anche le intestazioni come tasti di array è necessario

$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); 

Se si desidera saltare la riga di intestazione, basta chiamare fgets() una volta prima di entrare nel ciclo. O se volete la matrice di essere associativo come descritto sopra:

$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

In realtà, il file non è [C] omma [S] eperated (CSV) :) – tim

+2

CSV è diventato sinonimo di ... beh, "dati separati da qualcosa", e come un collega di lavoro nei giorni in cui era solito dire; "Caratteri separati dai caratteri" –

+0

@ColHeather Ecco perché ho fornito '" \ t "' come terzo parametro a 'fgetcsv()' ... :-D – DaveRandom

Problemi correlati