0

次のような CSV ファイルがあります。

State, name, balans
OH, John, 345
OH, Bill, 281
IL, James, 34
OH, James, 45
MA, Bill, 71
OH, Thomas, 541 
SC, Pete, 125
AL, Mary, 51
NY, Ivan, 123
MD, Chan, 234
CA, Lee, 181
WI, Juan, 131
AL, Kate, 135
CO, Robert, 215

州ごとに集計された合計残高を取得する必要があります。

出力 file.txt は次のようになります。

OH [Sum of balans]   
NY [sum of ballans]
etc

そのような例をインターネットで探していましたが、何も見つかりませんでした。作業できるコード例またはフレームワークが必要です。

私はこのようなことをすべきだと思った:

$inputfile  = 'input.csv';

$outputFile = 'output.txt';


$inputHandle = fopen($inputfile, "r");
$outputHandle = fopen($outputFile, 'w');
$balansCol = 2;

while (($dataRow = fgetcsv($inputHandle, 1000, ",")) !== FALSE) {

    $sumArray = array();
    $sumArray[] = $dataRow;      
 }

   foreach ($sumArray as  $subArray) {

    foreach ($subArray as $id => $value) {
        $sumArray[2] += $value;
    }
}

しかし、これは良いアプローチではないと思います...誰かがそれを解決するための比較的簡単な方法を提供できますか?

4

2 に答える 2

0

サブアレイと複数の反復は必要ありません。合計の空の配列を作成し、ファイルをループしながら要素を作成/追加して埋めます。

$sumArray = array();
while (($dataRow = fgetcsv($inputHandle, 1000, ",")) !== FALSE) {
    $state = $dataRow[0];
    $balance =  $dataRow[2];
    if (!isset($sumArray[$state])) {
        $sumArray[$state] = 0; // create new entry for state with balance=0
    }
    $sumArray[$state] += $balance; // add balance for state
}
于 2013-07-01T21:22:39.970 に答える