写入CSV - 按列而不是逐行

时间:2013-05-20 16:32:01

标签: php

我熟悉创建CSV,然后使用fputcsv等功能或使用fwrite手动添加行。 IE:

fwrite($fh, $facility . "\r\n");
fwrite($fh, $s . " - " . $e . "\r\n");

fwrite($fh, "\r\n");
fwrite($fh, "\r\n");


foreach ($first_column as $f){
    fwrite($fh, $f . "," . "\r\n");
}

我的$first_column数组看起来像:

$first_column = array(
        'Chocolate Milk',
        'White Milk',
        'Orange Juice',
        'Apple Juice',
);

它会创建一个类似于此的文件:

West Middle School
5/1/2013 - 5/3/2013


Chocolate Milk,
White Milk,
Orange Juice,
Apple Juice,

我想根据日期在下一个字段中添加数据。数据看起来与此类似:

$second column['05/01/2013'] = array(5,3,2,2);
$third column['05/02/2013'] = array(5,1,3,5);

然后我可以遍历每个日期,并将值与$first_column映射匹配。

可以这样做吗?或者我必须逐行编写数据,如:

$data_row['chocolate milk'] = array(5,5,3,6);
$data_row['white milk'] = array(3,1,5,0);

我想要的CSV会是这样的:

West Middle School
5/1/2013 - 5/3/2013

,5/1/2013,5/2/2013
Chocolate Milk,5,5
White Milk,3,1
Orange Juice,2,3
Apple Juice,2,5

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以以列为基础在程序中包含数据。但是以这种方式将它们写入文件并不是最佳的。更好的方法是在内存中创建csv结构,然后按行顺序存储它。

但是,您可以将它们存储在col-by-col中。只写第一列。关闭文件。重新打开文件,逐行加载并附加到每行第二列的末尾。这为你创造了新的“线”。将其写入新文件....并重复此操作直到完成。这是程序的最快解决方案,如果你想要逐个aproach。当然,这种方法的效率很差。