2013-07-04 6 views
7

I in einer Datei test_tab.txt genannt folgenden habe (tab getrennt):PHP - Explodieren Wert in einem Array, ausgegeben tab separierte Datei

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

Ich mag, die die folgenden (auch getrennt Registerkarte konvertieren geschrieben, auf eine andere Textdatei):

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 

ich bin neu in die Programmierung im allgemeinen, aber ich habe um gegoogelt und ich denke, eine Möglichkeit, dies zu tun wäre, um ein Array zu erstellen und irgendwie die header3 explodieren Schlüssel-Wert-Paar. obwohl ich bin mir nicht sicher, wie das Kopieren der Felder unter header1 und header2 zu gehen.

Alles, was ich im Moment haben, ist ein Code, ein Array zu erstellen:

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

die gibt:

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 
      ) 

    ) 

Irgendwelche Ideen auf, wie man diesen Ansatz? Ich benutze PHP Version 5.3.10.

+0

über den PHP-Funktionen eingebauten [fgetcsv()] (http://www.php.net/manual/en/function.fgetcsv.php) und [fputcsv()] (http: //www.php .net/manual/en/function.fputcsv.php) arbeitet mit getrennten Werten Dateien; oder sogar [SPLFileObject] (http://www.php.net/manual/en/class.splfileobject.php) –

Antwort

8

Versuchen Sie folgendes:

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

Hoffnung, das hilft.

+0

Vielen Dank! :) – ictl

+0

Glücklich zu helfen :) –

3

Ihr Text mit Tab werden getrennt müssen und versuchen dann diese,

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