2013-07-04 12 views
7

I mają następujące w pliku o nazwie test_tab.txt (karta rozdzielone)PHP - eksplodować wartości w tablicy, wyjście na karcie oddzielone plik

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

ja do konwersji, że do następnego (także zakładki oddzielona napisany do innego pliku tekstowego):

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 

Jestem nowym do programowania w ogóle, ale ja googled wokół i myślę, że możliwym sposobem osiągnięcia tego byłoby utworzyć tablicę i jakoś eksplodować header3 para klucz-wartość. Nie jestem pewien, jak kopiować pola pod nagłówkiem1 i nagłówkiem2.

Wszystko mam w tej chwili jest jakiś kod, aby utworzyć tablicę:

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

co daje:

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 
      ) 

    ) 

Wszelkie pomysły, w jaki sposób podejść do tego? Używam wersji PHP 5.3.10.

+0

Użyj wbudowanych funkcji PHP [fgetcsv()] (http://www.php.net/manual/en/function.fgetcsv.php) i [fputcsv()] (http: //www.php .net/manual/en/function.fputcsv.php) do pracy z plikami o wartościach rozdzielonych; lub nawet [SPLFileObject] (http://www.php.net/manual/en/class.splfileobject.php) –

Odpowiedz

8

Spróbuj tego:

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

nadzieję, że to pomaga.

+0

Dziękuję bardzo! :) – ictl

+0

Chętnie pomogę :) –

3

Twój tekst musi być oddzielona z karty, a następnie spróbować tego,

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