par
zeus » 17 janv. 2006, 15:57
Je te propose 3 version de ce code et je te laisse comparer l'optimisation
Je pense avoir mis assez de commentaires ;
Ta version en ré-indenté :
if ( $garantie == 'niveau1' AND $option == 'renfort') {
$fac1 = ($_SESSION['niv1']*1.10)-$_SESSION['niv1'];
} else if ( $garantie == 'niveau1plus' AND $option == 'renfort') {
$fac1 = ($_SESSION['niv1plus']*1.10)-$_SESSION['niv1plus'];
} else if ( $garantie == 'niveau2' AND $option == 'renfort') {
$fac1 = ($_SESSION['niv2']*1.10)-$_SESSION['niv2'];
} else if ( $garantie == 'niveau3' AND $option == 'renfort') {
$fac1 = ($_SESSION['niv3']*1.10)-$_SESSION['niv3'];
} else {
echo 'erreur'; //Permet de détecter l'erreur
}
echo $fac1;
Ensuite, j'ai remarqué que tu testait à chaque fois la valeur de $option, j'ai donc fait une factorisation et comme les différents if ne testait que $garantie, je l'ai remplacé par un switch/case
//Permet de ne tester une seule fois
if ($option == "renfort") {
//Plus simple et optimisé que plusieurs if
switch ($garantie) {
//Calcul en fonction de la valeur de $garantie
case "niveau1":
$fac1 = ($_SESSION['niv1']*1.10)-$_SESSION['niv1'];//ASTUCE : pour calculer 10% d'une valeur, il suffit de multiplier par 0.10 ;)
break;
case "niveau1plus":
$fac1 = ($_SESSION['niv1plus']*1.10)-$_SESSION['niv1plus'];
break;
case "niveau2":
$fac1 = ($_SESSION['niv2']*1.10)-$_SESSION['niv2'];
break;
case "niveau3":
$fac1 = ($_SESSION['niv3']*1.10)-$_SESSION['niv3'];
break;
//Si $garantie ne correspond à aucun autre choix
default :
echo 'erreur';
break;
}
} else { //if ($option != "renfort")
echo 'erreur';
}
echo $fac1;
Finalement, je me suis rendu compte que le calcul était toujours le même et que tout dépendait de la valeur de $garantie. Comme $garantie et sa valeur associée dans la session sont différente, j'a créé un tableau de correspondance
//Création du tableau de correspondance entre les valeurs de $garantie et les variables
//>> de session associées
$a_corres = array( "niveau1" => "niv1",
"niveau1plus" => "niv1plus",
"niveau2" => "niv2",
"niveau3" => "niv3")
//Permet de ne tester une seule fois
if ($option == "renfort") {
//Si la valeur de garantie existe dans le tableau $a_corres
// /!\ ATTENTION : array_key_exists si PHP > 4.1.0 sinon kay_exists
//>> http://fr.php.net/manual/fr/function.array-key-exists.php
if (array_key_exists($garantie, $a_corres)) {
//Récupération de l'index de la variable de session asscociée à la valeur de $garantie
$cle = $a_corres[$garantie];
//Calcul de la valeur
$fac1 = ($_SESSION[$cle]*0.10); //ASTUCE : pour calculer 10% d'une valeur, il suffit de multiplier par 0.10 ;)
} else { //Si $garantie ne dispose pas de valeur asscociée en session
$fac1 = "erreur";
}
} else { //if ($option != "renfort")
$fac1 = "erreur";
}
echo $fac1;
Note : si tu fait val*1.10, tu fait 110% de la valeur
pour avoir 10%, c'est val*0.1