這不會執行任何數字驗證或貨幣格式設置,但它確實可以很好地壓縮代碼段。我也不確定你想要哪一個數字,所以我返回三個數值:稅率,稅額和價格減稅。
而不是一個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