Windows10にXAMPPを入れ
CSVデータを取り込み集計出力を行っています。
2019-1-1,150,
2019-1-3,,100
2019-2-1,100,
2019-2-19,,150
2019-3-11,50,
2019-6-19,,100
2019-7-19,150,
2019-7-21,,100
2019-8-19,100,
2019-8-20,,150
2019-9-20,50,
2019-12-20,,100
2020-1-1,150,
2020-1-10,,100
2020-2-10,100,
2020-2-26,,150
2020-3-26,50,
2020-6-26,,100
上記データを取り込み下記のように
出力できるまでできました。
2019年1月入金集計:150、出金合計:100
2019年2月入金集計:100、出金合計:150
2019年3月入金集計:50、出金合計:0
2019年6月入金集計:0、出金合計:100
2019年7月入金集計:150、出金合計:100
2019年8月入金集計:100、出金合計:150
2019年9月入金集計:50、出金合計:0
2019年12月入金集計:0、出金合計:100
2020年1月入金集計:150、出金合計:100
2020年2月入金集計:100、出金合計:150
2020年3月入金集計:50、出金合計:0
2020年6月入金集計:0、出金合計:100
=========================================
トータル:入金合計:900、出金合計:1050
下記のように一度年で合計を入れたいです。
2019年1月入金集計:150、出金合計:100
2019年2月入金集計:100、出金合計:150
2019年3月入金集計:50、出金合計:0
2019年6月入金集計:0、出金合計:100
2019年7月入金集計:150、出金合計:100
2019年8月入金集計:100、出金合計:150
2019年9月入金集計:50、出金合計:0
2019年12月入金集計:0、出金合計:100
----------------------
2019年:入金合計:600、出金合計:700
2020年1月入金集計:150、出金合計:100
2020年2月入金集計:100、出金合計:150
2020年3月入金集計:50、出金合計:0
2020年6月入金集計:0、出金合計:100
----------------------
2020年:入金合計:300、出金合計:350
=========================================
トータル:入金合計:900、出金合計:1050
【現状のコード】
<?php if (sizeof($argv) <= 1) { echo "ファイルが指定されていませんので処理終了します。".PHP_EOL; exit; } $input_file = $argv[1]; if (!file_exists($input_file)) { echo "指定された情報はファイルではありませんので処理終了します。".PHP_EOL; exit; } $fp = fopen($input_file, 'r'); if ($fp === false) { echo "ファイルオープン時に失敗したので処理終了します。".PHP_EOL; exit; } $is_error = false; $break_key_year = ''; $break_key_month = ''; $i=0; // ★From $nyukin = 0; // 入金ワーク $syukin = 0; // 出金ワーク // ★To while ($line = fgets($fp)) { $i++; // ファイル読込終了判定 if (feof($fp)) { break; } // ファイル読込エラー判定 if ($line === false) { echo "ファイル読込時に失敗したので処理終了します。".PHP_EOL; $is_error = true; break; } // カンマ分割 $work_field = explode(',', $line); // 日付分割 $work_date = explode('-', $work_field[0]); // ★From $a[] = $work_field[1]; $b = array_sum($a); $c[] = $work_field[2]; $d = array_sum($c); // ★To // ブレイク判定 if(($break_key_year != $work_date[0])){ if ($i != 1) { echo '---------------------------------------------------'.PHP_EOL; echo $break_key_year.'年:'.'入金合計:'.$b.'出金合計:'.$d.PHP_EOL; echo PHP_EOL; } } if (($break_key_year != $work_date[0]) || ($break_key_month != $work_date[1])) { if ($i != 1) { echo $break_key_year.'年'.$break_key_month.'月'.'入金集計:'.$nyukin.'、出金合計:'.$syukin.PHP_EOL; $nyukin = 0; $syukin = 0; // ★To } // ブレイク判定変数に現在の行の情報を退避 $break_key_year = $work_date[0]; $break_key_month = $work_date[1]; } // ★From $w_nyukin = trim($work_field[1]); $w_syukin = trim($work_field[2]); if(empty($w_nyukin) && empty($w_syukin)){ echo $i.'行目のデータがありませんのでデータをスキップします。'.PHP_EOL; continue; } //通常処理 if (empty($w_nyukin)) { $syukin += $w_syukin; } else { $nyukin += $w_nyukin; } if(($break_key_year != $work_date[0])){ if($i != 1){ echo $break_key_year.'年:'.'入金合計:'.$b.'出金合計:'.$d.PHP_EOL; } } } echo $break_key_year.'年'.$break_key_month.'月'.'入金集計:'.$nyukin.'、出金合計:'.$syukin.PHP_EOL; echo '---------------------------------------------------'.PHP_EOL; echo $break_key_year.'年:'.'入金合計:'.$b.'出金合計:'.$d.PHP_EOL; echo PHP_EOL; echo '========================================='.PHP_EOL; echo 'トータル:'.'入金合計:'.$b.'、出金合計:'.$d.PHP_EOL; fclose($fp); if ($i == 0) { echo "指定されたファイルは空ファイルでした。".PHP_EOL; }
【試したこと】
下記コードを追加しました。
if(($break_key_year != $work_date[0])){
if ($i != 1) {
echo '---------------------------------------------------'.PHP_EOL;
echo $break_key_year.'年:'.'入金合計:'.$b.'出金合計:'.$d.PHP_EOL;
echo PHP_EOL;
}
}
しかし結果は上記のように2019年の12月だけが2020年側にいってしまいます。
ご教授頂ければ幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/22 11:49