2013-07-04 21 views
7

に出力する値を爆発(タブ区切り)test_tab.txtと呼ばれる:PHP - 私は、ファイルに次のようしている、配列内のタブ区切りファイル

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

私は次のようにそれを変換したいと思いますが(また、タブを分離します、)別のテキストファイルに書き込ま:

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 

私は一般的なプログラミングに新しいんだけど、私の周りGoogleで検索していると私はこれを行うための可能な方法は、配列を作成し、何とかheader3を爆発することだと思いますキーと値のペア。ヘッダー1とヘッダー2の下のフィールドをコピーする方法についてはわかりません。

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

います:これをアプローチする方法について

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 
      ) 

    ) 

任意のアイデア

私が現時点で持っているすべては、配列を作成するためにいくつかのコードがありますか?私はPHPのバージョン5.3.10を使用しています。

+0

組み込みのPHP関数[fgetcsv()](http://www.php.net/manual/en/function.fgetcsv.php)と[fputcsv()](http://www.php .net/manual/en/function.fputcsv.php)を使用して区切り値ファイルを処理します。または[SPLFileObject](http://www.php.net/manual/en/class.splfileobject.php) –

答えて

8

はこれを試してみてください:

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

・ホープ、このことができます。

+0

ありがとうございました! :) – ictl

+0

喜んで:) –

3

あなたのテキストはタブで区切られ、その後、これを試してみてくださいする必要があり、

<?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);?> 
関連する問題