【问题标题】:PHP - explode values in an array, output to tab separated filePHP - 分解数组中的值,输出到制表符分隔的文件
【发布时间】:2013-07-02 06:02:35
【问题描述】:

我在一个名为test_tab.txt(制表符分隔)的文件中有以下内容:

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

一般来说,我是编程新手,但我搜索了一下,我认为这样做的一种可能方法是创建一个数组并以某种方式分解 header3 键值对。我不确定如何复制 header1 和 header2 下的字段。

我现在只有一些创建数组的代码:

$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。

【问题讨论】:

标签: php arrays split key-value csv


【解决方案1】:

试试这个:

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    你的文字必须用制表符分隔,然后试试这个,

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

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多