これは番号の検証や通貨の書式設定を行いませんが、スニペットをかなり圧縮します。私はあなたが結果として欲しい人物もわからないので、私は3つの値を返しています:レート、税額、価格から税金を差し引いた金額。
if/else文のブロックではなく、配列関数を使用することにしました。 (Demo)
方法#1:2ライン及びリターン
function tax($value) {
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
$rate=key(array_filter($tiers,function($threshold)use($value){return $value>$threshold;}));
return [$rate,$value*$rate,$value-$value*$rate];
}
方法#2:4ライン及びリターンが、より効率的
function tax($value) {
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
foreach($tiers as $rate=>$threshold){
if($value>$threshold){break;} // $rate will be preserved outside of the loop
}
return [$rate,$value*$rate,$value-$value*$rate];
}
このような関数を呼び出します:var_export(tax(126999));
意志出力:
array (
0 => '.12',
1 => 1523988.0,
2 => 11175912.0,
)
「コードの簡潔性」を「コードの効率性」よりも先に置くので、方法1をお勧めします。このタスクは非常に小さい/軽いので、私は誰もマイクロ最適化を介してどのような利益に気づくとは思わない。
P.S.あなたは同じスクリプトでこの複数回行っていないおよび/または関数呼び出しをしたくない場合、あなたはこれを使用して$rate
を宣言することができます。
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
$rate=key(array_filter($tiers,function($threshold)use($value){return $value>$threshold;}));
または
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
foreach($tiers as $rate=>$threshold){
if($value>$threshold){break;}
}
を私は興味私はもっと簡潔な何かを考え出すことができるかどうかを見るために、それを比較する何かを持っている必要があります! –
ユーザーが130,000を入力したときに期待される結果は何ですか?私は '125,000 * 0.00 +(130,000 - 125,000)* .02 = 100'を期待しています。 – Arjan