2013-07-04 15 views
7

Ho quanto segue in un file denominato test_tab.txt (tab separati) separato , scritto in un altro file di testo):PHP esplodere valori in una matrice, output scheda lima

header1 header2 header3 
field1 field1a field1b 
field1 field1a field1c 
field2 field2a field2b 
field3 field3a 
field4 field4a field4b 
field4 field4a field4c 
field4 field4a field4d 
field4 field4a field4e 
field5 field5a 
field6 field6a field6c 
field6 field6a field6c 

sono nuovo di programmazione in generale, ma googled intorno e penso che un possibile modo per farlo sarebbe quello di creare un array e in qualche modo esplodere il header3 coppia chiave-valore. Non sono sicuro di come fare per copiare i campi sotto header1 e header2 però.

Tutto quello che ho in questo momento è un po 'di codice per creare una matrice:

$mainarray = array(); 
foreach (file('test_tab.txt') as $row) { 
    list($header1, $header2, $header3) = explode("\t", $row); 
    $mainarray[] = array(header1 => $header1, header2 => $header2, header3 => $header3); 
} 

print_r($mainarray); 

che dà:

Array 
    (
     [0] => Array 
      (
       [header1] => header1 
       [header2] => header2 
       [header3] => header3 

      ) 

     [1] => Array 
      (
       [header1] => field1 
       [header2] => field1a 
       [header3] => field1b; field1c 

      ) 

     [2] => Array 
      (
       [header1] => field2 
       [header2] => field2a 
       [header3] => field2b 

      ) 

     [3] => Array 
      (
       [header1] => field3 
       [header2] => field3a 
       [header3] => 

      ) 

     [4] => Array 
      (
       [header1] => field4 
       [header2] => field4a 
       [header3] => field4b; field4c; field4d; field4e 

      ) 

     [5] => Array 
      (
       [header1] => field5 
       [header2] => field5a 
       [header3] => 

      ) 

     [6] => Array 
      (
       [header1] => field6 
       [header2] => field6a 
       [header3] => field6b; field6c 
      ) 

    ) 

Tutte le idee su come affrontare questo? Sto usando la versione 5.3.10 di PHP.

+0

Utilizzare le funzioni PHP integrate [fgetcsv()] (http://www.php.net/manual/en/function.fgetcsv.php) e [fputcsv()] (http: //www.php .net/manual/it/function.fputcsv.php) per lavorare con file a valori separati; o anche [SPLFileObject] (http://www.php.net/manual/en/class.splfileobject.php) –

risposta

8

Prova questa:

// read input file 
$fp = fopen('test_tab.txt', 'r'); 

// write to an output file 
$fp1 = fopen('output.txt', 'w'); 

while(($data = fgetcsv($fp, '', "\t")) !== FALSE) { 
    $list = explode(';', $data[ 2 ]); 

    foreach($list as $column) { 
     fwrite($fp1, '"' . $data[ 0 ] . "\"\t\"" . $data[ 1 ] . "\"\t\"" . trim($column) . "\"\n"); 
    } 
} 

fclose($fp1); 
fclose($fp); 

Spero che questo aiuti.

+0

Grazie mille! :) – ictl

+0

Felice di aiutare :) –

3

Il testo deve essere separato con patta e quindi provare questo,

<?php $mainarray = array(); 
foreach (file('test_tab.txt') as $row) { 
    $ar = explode("\t", $row); 
    $mainarray[] = array('header1' => $ar[0], 'header2' => $ar[1], 'header3' => $ar[2]); 
} 

var_dump($mainarray);?>