Php переупорядочить и добавить в CSV-файл

0

Мне нужно иметь сценарий, в который я могу загрузить 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, если нет данных, поскольку столбец все еще существует

  • 1
    Без кода трудно вносить предложения.
  • 0
    Код, который у меня был, вообще не работал и был не очень хорош. Я надеялся на что-то оригинальное от кого-то более опытного, чем я.
Теги:
csv

1 ответ

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;
        }
    }
?>
  • 0
    Если я установлю входной файл как $_FILES['file']['tmp_name']; сможет ли он получить прямой доступ к загрузке или мне нужно сохранить ее в определенном месте и вызвать эту функцию?
  • 0
    $ _FILES [ 'файл'] [ 'tmp_name']; не даст вам местоположение файла только имя. Вам нужно переместить файл из его временного места загрузки в указанный каталог и проанализировать оттуда.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню