我需要一个脚本,我可以上传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
答案 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;
}
}
?>