Мне нужно иметь сценарий, в который я могу загрузить 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
первых, у меня есть поле, которое включает дату и время, например, 1/31/15 23:59
. есть ли простой способ снять последние 6 символов?
Два, можно ли пропустить строку, если у col3
есть данные? У меня есть столбец с возвратом, который я бы хотел пропустить, если в нем есть дата. В противном случае. Я знаю, что могу использовать isset, но я не знаю, как сделать цикл пропуском и продолжить, если col3
isset. Также я не знаю, может ли isset по-прежнему быть TRUE, если нет данных, поскольку столбец все еще существует
<?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;
}
}
?>
$_FILES['file']['tmp_name'];
сможет ли он получить прямой доступ к загрузке или мне нужно сохранить ее в определенном месте и вызвать эту функцию?