2013-05-20 72 views
0

我熟悉創建CSV,然後使用fputcsv等函數或fwrite手動添加行。 IE:按列逐行而不是逐行寫入CSV

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

+0

你應該澄清你到底想做什麼。在您想要的更改之前和之後爲了更好地理解您的CSV示例將會很有幫助。 – migg

+0

按列寫入意味着在文件中會跳來跳去,還有很多複雜的代碼。將您的數據組合在一起,以便您可以寫入行。 – deceze

回答

1

可以在有數據的程序在列的基礎上。但以這種方式寫入文件並不是最優的。更好的辦法是在內存中創建csv結構,然後按行順序存儲它。

但是,您可以將它們存儲在col-by-col中。只需寫第一個欄目。關閉文件。重新打開文件,逐行加載並追加到每行第二列的末尾。這爲您創造了新的「線路」。將它寫入新文件....並重復此操作直至完成。如果您想逐個查看,這是編程速度最快的解決方案。當然,這種方法的效率會很差。

+0

謝謝馬丁。這是我正在尋找的。我意識到你的問題的後半部分,但不確定是否有其他方法來處理我的問題。 – etm124