Cela ne fera aucune validation de nombre ou mise en forme de devise, mais il condensera assez bien l'extrait. Je ne suis pas sûr non plus quel chiffre vous vouliez, donc je vous renvoie trois valeurs: le taux, le montant de la taxe et le prix moins la taxe.
Plutôt qu'un bloc d'instructions if/else, j'ai choisi d'utiliser les fonctions de tableau. (Demo)
Méthode n ° 1: 2 lignes et un retour
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];
}
Méthode n ° 2: 4 lignes et un retour, mais plus efficace
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];
}
L'appel de la fonction comme ceci : var_export(tax(126999));
affichera:
array (
0 => '.12',
1 => 1523988.0,
2 => 11175912.0,
)
Puisque vous placez la «brièveté de code» devant «l'efficacité de code», je recommanderais la méthode # 1. Parce que cette tâche est si petite/légère, je pense que personne ne remarquera de gains grâce à la micro-optimisation.
p.s. Si vous ne faites pas cela plusieurs fois dans le même script et/ou ne voulez pas un appel de fonction, vous pouvez déclarer $rate
en utilisant simplement ceci:
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
$rate=key(array_filter($tiers,function($threshold)use($value){return $value>$threshold;}));
ou
$tiers=['.12'=>1500000,'.1'=>925000,'.05'=>250000,'.02'=>125000,'0'=>0];
foreach($tiers as $rate=>$threshold){
if($value>$threshold){break;}
}
Je suis intéressé pour voir si je peux trouver quelque chose de plus concis, mais besoin d'avoir quelque chose à comparer! –
Quel est le résultat attendu lorsque l'utilisateur entre 130 000? Je m'attendrais '125,000 * 0,00 + (130,000 - 125,000) * .02 = 100'. – Arjan