2011-10-05 60 views
0

所以我能夠txt文件解析成csv文件分離的txt文件,許多CSV文件用PHP

$data = array(); 
while ($line= fgets ($fh)) { 
$stack = array($LAUS,$FIPS,$CountyName,$Date,$_CLF,$_EMP,$_UNEMP,$RATE); 
     array_push($data, $stack); 
} 
$file = fopen('file.csv','w'); 

foreach ($data as $fields) { 
fputcsv($file, $fields,',','"'); 
} 

fclose($file); 

我的問題是,什麼是創建由分隔多個CSV文件的最佳方法月份(也是一年,如Jan01.csv,Jan02.csv)。

+1

我不想聽起來居高臨下,但我猜「最好的方式」就是這樣做。你堅持什麼?月份數據來自哪裏?我在代碼中看不到任何 –

+0

對不起,我想我的問題有點含糊。有沒有辦法創建一個包含變量的變量名?像$ data_ $ Jan01,$ data_Jan02。這樣我可以檢查將哪個$月和$年發送給正確的數據數組。從那裏我知道如何輸出到不同的csv的 – mkral

+0

此外,沒有定義的csv文件的範圍,所以我不想硬編碼他們,如果我不必。 – mkral

回答

1

我正在有點猜你日期的格式

while ($line = fgets ($fh)) { 
    // Not sure where you're getting these values, but I'm assuming it's correct 
    $stack = array($LAUS,$FIPS,$CountyName,$Date,$_CLF,$_EMP,$_UNEMP,$RATE); 

    // Assuming $Date looks like this '2011-10-04 15:00:00' 
    $filename = date('My', strtotime($Date)) . '.csv'; 
    $file = fopen($filename,'a+'); 
    fputcsv($file, $stack,',','"'); 
    fclose($file); 
} 

因爲你打開和關閉經常文件這將是一個有點慢,但因爲我不知道原始數據集的大小我不想在寫入結果之前用盡所有內存緩存結果。

請注意,多次運行會導致重複數據被插入到您的CSV文件中。在運行這段代碼之前,您可能需要添加一些代碼來刪除/清除任何當前存在的CSV文件。

+0

感謝您的快速回答,這是接近的,但$棧是一行代碼,從我的原始代碼被推送到數據數組,然後數據被推送到csv文件。我怎樣才能將堆棧扔到適當的$ data數組而不用硬編碼$ dataJan01,$ dataJan02。我意識到我可以運行代碼,只是拉取適合當月/年的$堆棧,但我希望有一種方法可以避免該循環 – mkral

+0

也許你可以給我一個存儲在'$ stack 「我可以更好地瞭解我必須與之合作的內容。 – Tom

+0

等一下,你說得對。我是PHP新手,並沒有看到'a +'。我沒有意識到這意味着要追加。謝謝你的幫助。我不認爲這正是我想到的,但這似乎是做到這一點的方法。 – mkral