编辑CSV将行转换为列

时间:2016-05-21 03:31:11

标签: php csv

我正在使用Windows并使用CSV / XLS数据。我有一个需要用PHP编辑的数据,但我不确定如何。

以下是数据示例:

code1,data1
D0001,X1235466
D0002,X1232265
D0003,X1235166   
D0004,X5235466
D0005,X6232265
D0006,X7235166   

..等等 - 大约20,000行。

我试图让文件看起来像这样:

 code1,data1,code2,data2,code3,data3
 D0001,X1235466,D0002,X1232265,D0003,X1235166  
 D0004,X5235466,D0005,X6232265,D0006,X7235166 

依此类推,然后将其保存到新的CSV文件中。感谢。

1 个答案:

答案 0 :(得分:1)

好吧,我很无聊,所以我写了这个。但是,在发布问题之前,您确实需要尝试编写代码,并展示您的工作。

这里是:

<?php

$desiredColumns = 3;

$inputFd = fopen('data.csv', 'r');
$outputFd = fopen('output.csv', 'w');
$buffer = [];

// Write the CSV header.
fputcsv($outputFd, [
    'code1', 'data1', 'code2', 'data2','code3', 'data3'
]);

//Skip header line.
fgetcsv($inputFd);

while (!feof($inputFd)) {
    $line = fgetcsv($inputFd);
    if (empty($line) || empty($line[0])) {
        continue;
    }

    $line = array_map('trim', $line);
    $buffer[] = $line;

    // If our buffer has $desiredColumns in it, flush the buffer
    // to our output file.
    if (count($buffer) == $desiredColumns) {
        outputCsv($outputFd, $buffer);
        $buffer = [];
    }
}

// If we had a total number of entries that is not a multiple
// of 3, we need to output the remaining records.
if (!empty($buffer)) {
    outputCsv($outputFd, $buffer);
}

// Function for flushing a record buffer to the output file.
function outputCsv($outputFd, $buffer)
{
    $outputData = [];
    foreach ($buffer as $record) {
        $outputData[] = $record[0];
        $outputData[] = $record[1];
    }

    fputcsv($outputFd, $outputData);
}

现在,作为这个运行的一个例子:

$ cat data.csv
code1,data1
D0001,X1235466
D0002,X1232265
D0003,X1235166
D0004,X5235466
D0005,X6232265
D0006,X7235166

$ php so.php
$ cat output.csv
code1,data1,code2,data2,code3,data3
D0001,X1235466,D0002,X1232265,D0003,X1235166
D0004,X5235466,D0005,X6232265,D0006,X7235166