Php重新排序并添加到csv文件

时间:2015-03-08 02:26:52

标签: php csv

我需要一个脚本,我可以上传CSV并让它以新的顺序输出内容,删除一些字段并添加一些字段。我已经尝试将csv变成一个数组,但电子邮件似乎打破了它。输入可能如下所示:

col1, col2, col3, col4
name, addr, phon, emal
...

输出需要更改为:

col4, col1, col3, col5
emal, name, addr, stat
...

注意col3消失了,添加了col5。 col5是每行的相同值。

我是用foreach循环做的。哪个有效,但有点慢。我不知道是否有更好或更快的方式。

编辑:

答案似乎有效,但它提出了另外两个有用的功能:

一,我有一个字段,其中包含1/31/15 23:59之类的日期和时间。是否有一种简单的方法来删除最后6个字符?

两,如果说col3有数据,我们可以跳过一行吗?我有一个退款日期栏,如果有一个日期,我想跳过它。否则就是空白。我知道我可以使用isset但我不知道如何使循环跳过并在col3设置时继续。此外,我不知道如果由于列仍然存在而没有数据,isset可能仍然为TRUE

1 个答案:

答案 0 :(得分:1)

<?php
    $sInFile  = 'infile.csv';
    $sOutFile = 'outfile.csv';

    $iRow = 0;
    if( ( $rHandle = fopen( $sInFile, "r")) !== FALSE ) 
    {
        while( ( $aData = fgetcsv( $rHandle, 1000, ",") ) !== FALSE ) 
        {
            // Skip headers.
            if( $iRow != 0 )
            {
                $iCountColumns = count( $aData );
                for( $i = 0; $i < $iCountColumns; ++$i )
                {
                    // Source
                    // name, addr, phon, emal
                    $sTmp  = '';
                    $sTmp .= $aData[ 3 ];
                    $sTmp .= ', ';
                    $sTmp .= $aData[ 0 ];
                    $sTmp .= ', ';
                    $sTmp .= $aData[ 1 ];
                    $sTmp .= ', ';
                    $sTmp .= 'CONSTANT!'; 
                    $sTmp .= "\n"; 
                    // Output
                    // emal, name, addr, stat
                }
                file_put_contents( $sOutFile, $sTmp, FILE_APPEND | LOCK_EX );
            }
            ++$iRow;
        }
    }
?>