Изменить имена заголовков столбцов и изменить порядок столбцов в файле CSV в PHP - PullRequest
0 голосов
/ 17 октября 2018

У меня есть файл CSV, и я хочу через PHP изменить имена заголовков столбцов и изменить порядок столбцов.

Я пробовал это, но у меня это не сработает:

function toCSV($data, $outstream) {
    if (count($data)) {
        // get header from keys
        fputcsv($outstream, array_keys($data[0]));
        // 
        foreach ($data as $row) {
            fputcsv($outstream, $row);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я нашел какое-то решение для fo. Это удалит первую строку с именами столбцов, поместит ее в новый csv-файл и добавит новые имена столбцов в старом.

$old_file = 'X.csv';
$new_file = 'testdata_new.csv';

$file_to_read = file_get_contents($old_file);  // Reading entire file
$lines_to_read = explode("\n", $file_to_read);  // Creating array of lines

if ( $lines_to_read == '' ) die('EOF'); // No data 

$line_to_append = array_shift( $lines_to_read ); // Extracting first line 

$file_to_append = file_get_contents($new_file);  // Reading entire file

if ( substr($file_to_append, -1, 1) != "\n" ) $file_to_append.="\n";  // If new file doesn't ends in new line I add it

// Writing files
file_put_contents($new_file, $file_to_append . $line_to_append . "\n");
file_put_contents($old_file, implode("\n", $lines_to_read));



  $header = "here write the names  \r\n";
  $data = file_get_contents($old_file);
  file_put_contents($old_file, $header.$data);
0 голосов
/ 17 октября 2018

Пожалуйста, попробуйте это.

$inputCsv = 'sample.csv';
$outputCsv = 'output.csv';

$inputHandle = fopen($inputCsv, 'r');
$header = fgetcsv($inputHandle);


/*
 * 1. For name change
 */
$header[0] = 'column 1 name changed here';
$header[2] = 'column 3 name changed here';

 /*
     * 2. For header order change I am shuffling column names
 */
shuffle($header);

 $outputHandle = fopen($outputCsv, 'w');
 fputcsv($outputHandle, $header);


while($row = fgetcsv($inputHandle)){
    fputcsv($outputHandle, $row);
}

fclose($outputHandle);
...