2011-06-16 11 views
0

レポートに使用するにはCSVファイルからデータを取得する必要があります。ただし、輸出ソフトウェアには有用な形式でエクスポートする機能はありません。CSVファイルを配列に開いてデータを変更し、元のCSVファイルを変更されたデータで上書きするPHPヘルプが必要です

'Time','Month And Year','Count' 
'8 Hours','Apr 2011','127' 
'6 Hours','Apr 2011','45' 
'4 Hours','Apr 2011','23' 
'2 Hours','Apr 2011','122' 
'8 Hours','Dec 2010','29' 
'6 Hours','Dec 2010','8' 
'4 Hours','Dec 2010','1' 
'2 Hours','Dec 2010','64' 
etc... 

そして、これにそれを回す:私のようなデータをCSVファイルを利用したいと思いPHP使用現時点では

Time,Dec 2010,Jan 2011,Feb 2011,Mar 2011,Apr 2011,May 2011 
8 Hours,126,47,115,77,127,110 
6 Hours,45,18,62,38,42,31 
4 Hours,23,3,11,8,15,18 
2 Hours,122,93,185,144,128,70 

を、私は(fgetcsvを使用してCSVファイルを開くためのコードを持っています)と、不要な文字を削除します。

01:

$lines = array(); 
$tempName = array(); 
$tempCount = array(); 
$tempTitle = array(); 
$items = array(); 

$fp = fopen('../data/data2.csv','r') or die("can't open data2.csv"); 

while($lines = fgetcsv($fp,4096,"\\n")) { 

    for ($i = 0, $j = count($lines); $i < $j; $i++) { 

    $lines[$i] = str_replace('\'', '', $lines[$i]); 
    $lines[$i] = str_replace('A: ', '', $lines[$i]); 
    $lines[$i] = str_replace('B: ', '', $lines[$i]); 
    $lines[$i] = str_replace('C: ', '', $lines[$i]); 
    $lines[$i] = str_replace('D: ', '', $lines[$i]); 

    } 
} 

fclose($fp) or die("can't close volume2.csv"); 

これは、CSVの行が$ラインの配列は次のようになりますコンマ区切り行にファイルを保存します

Time,Month And Year,Count 
8 Hours,Apr 2011,127 
6 Hours,Apr 2011,45 
4 Hours,Apr 2011,23 
2 Hours,Apr 2011,122 
8 Hours,Dec 2010,29 
6 Hours,Dec 2010,8 
4 Hours,Dec 2010,1 
2 Hours,Dec 2010,64 
etc... 

これで、データを正しい順序で1つまたは複数の配列に格納して、CSVファイルに戻すことができます。

私が使用してみました:

for ($h = 0, $k = count($lines); $h < $k; $h++) { 
    $items = preg_split("/[,]+/",$lines[$h]); 
} 

、その後、case文を使って配列に正しいデータを配置し、それがハングアップするので、私は何か間違ったことしなければなりません。 (このコードは最適化されていません)

私はここからどこに行くことができますか?ありがとう!

答えて

4

あなたはfgetcsv()を間違った方法で使用していて、一度に複数の行を読み込んでいます。

使用するようにコードを変更します。

while($line = fgetcsv($fp)) { 

} 

及び各繰り返しで一度に行を解析します。

あなたはCSVファイルにこのバックを書きたい場合は、ような何かを行うことができるshoudl:

$out = array(); 
while($line = fgetcsv($fp)) { 
    // modify fields as you need to 
    $out[] = implode(",", $line); 
} 

// now you can write implode("\n", $out) out as the modified data 
関連する問題