<?php
function personTax($lauwen_taxed_amount, $lauwen_monthly_tax_amount) {
$lauwen_tax_amounts = ['0', '36000', '144000', '300000', '420000', '660000', '960000'];
$lauwen_tax_rates = ['0.03', '0.1', '0.2', '0.25', '0.3', '0.35', '0.45'];
$lauwen_tax_quickly = ['0', '2520', '16920', '31920', '52920', '85920', '181920'];
$lauwen_taxed_amount = (string)$lauwen_taxed_amount;
$lauwen_monthly_tax_amount = (string)$lauwen_monthly_tax_amount;
$lauwen_month_after_amount = bcadd($lauwen_taxed_amount, $lauwen_monthly_tax_amount, 6);
$old_key = 0;
$new_key = 0;
$end_key = count($lauwen_tax_amounts) - 1;
foreach ($lauwen_tax_amounts as $key => $val) {
if ($key == $end_key) {
if (bccomp($lauwen_taxed_amount, $val, 2) == 1) {
$old_key = $key;
}
if (bccomp($lauwen_month_after_amount, $val, 2) == 1) {
$new_key = $key;
}
} else {
if (bccomp($lauwen_taxed_amount, $val, 2) == 1 && bccomp($lauwen_taxed_amount, $lauwen_tax_amounts[$key+1], 2) == -1) {
$old_key = $key;
}
if (bccomp($lauwen_month_after_amount, $val, 2) == 1 && bccomp($lauwen_month_after_amount, $lauwen_tax_amounts[$key+1], 2) == -1) {
$new_key = $key;
break;
}
}
}
$quickly_old_tax = bcsub(bcmul($lauwen_taxed_amount, $lauwen_tax_rates[$old_key], 6), $lauwen_tax_quickly[$old_key], 6);
$quickly_new_tax = bcsub(bcmul($lauwen_month_after_amount, $lauwen_tax_rates[$new_key], 6), $lauwen_tax_quickly[$new_key], 6);
$tax0 = bcsub($quickly_new_tax, $quickly_old_tax, 2);
$tax = '0';
while ($new_key >= $old_key) {
$level_amount = bcsub($lauwen_month_after_amount, $lauwen_tax_amounts[$new_key], 6);
if ($new_key == $old_key) {
$level_amount = bcsub($lauwen_month_after_amount, $lauwen_taxed_amount, 6);
}
$tax = bcadd($tax, bcmul($level_amount, $lauwen_tax_rates[$new_key]), 2);
$lauwen_month_after_amount = $lauwen_tax_amounts[$new_key];
$new_key --;
}
return [
"normal" => $tax,
"quickly" => $tax0,
];
}
print_r(personTax());