私は解決策を見つけました。以下の回答および/またはより新しい最適化があるGithub Gistを参照してください。
クレジット カードの請求額とバッチの合計の配列を取得しました...金額の SUM() がバッチの金額になる場合があるため、バッチにグループ化するのは簡単で、その日の預金に貢献するトランザクションをチェックすることができます。当座預金口座。
場合によっては、適切な合計がこれらの料金のサブセットであり、1 つ以上が翌日にバッチ処理されることがあります。これをプログラムで解決するのを手伝ってくれませんか? これは私の authorize.net バッチ アカウンティング用です。
+------------+--------+
| transId | amount |
+------------+--------+
| 2863996511 | 154.00 |
| 2863992361 | 762.20 |
| 2863898975 | 49.00 |
| 2863894564 | 5.44 |
| 2863879671 | 10.88 |
| 2863858891 | 209.00 |
| 2863856334 | 148.00 |
| 2863367273 | -25.01 |
+------------+--------+
そして、その日のバッチの合計は $1302.63 です。よくあることですが、料金はそのバッチに収まらないため、バッチは配列内の料金の合計のサブセットです。この場合、$10.88 の請求は翌日のバッチに含まれていました。この小さな疑似コードは、ネストされた 2 つの for ループを介してそれをキャッチできます。
for( $skipdx=0; $skipdx<$size; $skipdx++){
$total=0;
for( $idx=0; $idx<$size; $idx++){
if($idx!=$skipdx){
$total+=$charges[$idx]['amount'];
$thisBatch[]=$charges[$idx]['transId'];
}
if( abs($total-$batch['total']) < .04 ) {
echo "sum of charges matches $date batch total: $$total (line: ". __LINE__ .")\n";
$foundIt=TRUE;
break;
}
}
if($foundIt==TRUE)
break;
}
TWO が追加されていない請求を動的に検索するにはどうすればよいですか? それから3つ?$skipdx
1つの電荷が省略された場合、2 つの電荷がスキップされるとskip2dx
ネストされたループが追加されることがわかります。それでも見つからない場合は、skip3dx
3 番目のレベルのネストになります。
私は通常、再帰まではアルゴリズムが得意ですが、その後はバカになります。