Bonjour à tous,
J'aimerais effectuer des conversions de mesures aéronautiques. L'utilisateur entre la valeur et l'unité et retrouve cette valeur convertie dans toutes les autres unités utilisées dans l'aéronautique. En codant, j'ai remarqué que mon code était affreusement répétitif… J'ai crû comprendre qu'il fallait absolument éviter cela. Donc j'ai commencé à réfléchir à une fonction ou une classe qui pourrait simplifier tout ça, mais j'arrive vraiment pas à voir comment faire ça. Voici mon code :
<?phpif(isset($_POST['value'])&&isset($_POST['unit'])){$value=floatval($_POST['value']);$value==0?$value=1:$value=$value;// Si n'importe quoi est envoyé, $value sera égale à 1$nbDecimal=3;switch($_POST['unit']){// Vitessescase'km/h':echo'<p>'.$value.' km/h = '.number_format($value/1.852,$nbDecimal).' kt.</p>';// km/h vers ktecho'<p>'.$value.' km/h = '.number_format($value*0.2777777777778,$nbDecimal).' m/s.</p>';// km/h vers m/sbreak;case'kt':echo'<p>'.$value.' kt = '.number_format($value*1.852,$nbDecimal).' km/h.</p>';// kt vers km/hecho'<p>'.$value.' kt = '.number_format($value*0.51444444444,$nbDecimal).' m/s.</p>';// kt vers m/sbreak;case'm/s':echo'<p>'.$value.' m/s = '.number_format($value*3.6,$nbDecimal).' km/h.</p>';// m/s vers km/hecho'<p>'.$value.' m/s = '.number_format($value*1.9438444924571,$nbDecimal).' kt.</p>';// m/s vers ktbreak;// Longueurscase'ft':echo'<p>'.$value.' ft = '.number_format($value/3.2808,$nbDecimal).' m.</p>';// ft vers mecho'<p>'.$value.' ft = '.number_format($value*0.0003048,$nbDecimal).' km.</p>';// ft vers kmecho'<p>'.$value.' ft = '.number_format($value*0.33333,$nbDecimal).' yd.</p>';// ft vers ydbreak;case'm':echo'<p>'.$value.' m = '.number_format($value*3.2808399,$nbDecimal).' ft.</p>';// m vers ftecho'<p>'.$value.' m = '.number_format($value/1000,$nbDecimal).' km.</p>';// m vers kmecho'<p>'.$value.' m = '.number_format($value*1.0936,$nbDecimal).' yd.</p>';// m vers ydbreak;case'km':echo'<p>'.$value.' km = '.number_format($value*3280.8398950131,$nbDecimal).' ft.</p>';// km vers ftecho'<p>'.$value.' km = '.number_format($value*1000,$nbDecimal).' m.</p>';// km vers mecho'<p>'.$value.' km = '.number_format($value*1093.61329834,$nbDecimal).' yd.</p>';// km vers ydbreak;case'yd':echo'<p>'.$value.' yd = '.number_format($value*3.00,$nbDecimal).' ft.</p>';// yd vers ftecho'<p>'.$value.' yd = '.number_format($value*0.9144,$nbDecimal).' m.</p>';// yd vers mecho'<p>'.$value.' yd = '.number_format($value/1093.61329834,$nbDecimal).' km.</p>';// yd vers km break;// Températurescase'°C':echo'<p>'.$value.' °C = '.number_format(($value*1.8000)+32.00,2).' °F.</p>';// °C vers °Fecho'<p>'.$value.' °C = '.number_format($value+273.15,2).' K.</p>';// °C vers Kbreak;case'°F':echo'<p>'.$value.' °F = '.number_format(($value-32)/1.8000,2).' °C.</p>';// °F vers °Cecho'<p>'.$value.' °F = '.number_format((($value-32)/1.8000)+273.15,2).' K.</p>';// °F vers Kbreak;case'K':echo'<p>'.$value.' K = '.number_format($value-273.15,2).' °C.</p>';// K vers °Cecho'<p>'.$value.' K = '.number_format(($value*(9/5))-459.67,2).' °F.</p>';// K vers °Fbreak;default:echo"<strong>ERREUR:</strong> Les valeurs entrées sont incorrectes ou incomplètes.";break;}}?>
Donc les valeurs sont obtenues grâce aux variables $_POST['value'] (contient la valeur à convertir) et $_POST['unit'] contient l'unité d'origine.
Si vous savez comment faire, merci d'avance !
ensuite tu n'auras plus qu'à faire une fonction qui convertit une unité en une autre:
1
2
3
4
5
6
7
<?php//en supposant que ton tableau s'appelle conversion_tabfunctionconvert($from_unit,$target_unit,$from_value){$multiplier=$conversion_tab[$from_unit][$target_unit][0];$origin_ordinate=$conversion_tab[$from_unit][$target_unit][1];return$from_value." $from_unit = ".number_format(($from_value*$multiplier)-$origin_ordinate,2);}
Merci beaucoup de ta réponse, et excuse moi du retard de la mienne.
Et effectivement, je n'avais absolument pas pensé à utiliser un tableau (en faite, je n'y pense jamais… ). Donc je pourrais imaginer un tableau comme celui-ci ?
la méthode la plus simple est non array_key_exists mais isset($conversion_tab[$from_unit])
et la raison de cela c'est simplement que dans ta fonction $conversion_tab n'existe pas. Il faut soit le créer dans ta fonction soit le passer en argument.
<?phpfunctionconvert($units_tab,$from_unit,$from_value,$nbDecimal=3){if(!isset($units_tab[$from_unit])){echo'<p><strong>ERREUR : </strong>L\'unitée est inconnue.</p>';}else{if($_POST['type_conv']!='temperature'&&$from_value<=0){// On check qu'une vitesse ou une longueur ne soit pas négative.$from_value=1;}foreach($units_tab[$from_unit]as$target_unit=>$multiplier){echo'<p>'.$from_value.' '.$from_unit.' = '.number_format($from_value*$multiplier,$nbDecimal,',',' ').' '.$target_unit.'.</p>';}}}
Mais je ne comprend toujours pas de coup tu parlais en disant additionneurs ?
Comme c'est vraiment spécifique aux températures et que l’additionneur n'est jamais au même endroit je pense que je les écrirais à la main. En tout cas, merci beaucoup, mon code est vraiment mieux foutu maintenant !
Comme c'est vraiment spécifique aux températures et que l’additionneur n'est jamais au même endroit je pense que je les écrirais à la main. En tout cas, merci beaucoup, mon code est vraiment mieux foutu maintenant !
Si, il est toujours au même endroit. C'est juste que parfois il vaut 0
<?phpecho'<p>'.$value.' °C = '.number_format(($value*1.8000)+32.00,2).' °F.</p>';// °C vers °F
Me permet de passer de Celsius vers des Fahrenheit. Je multiplie d'abord par 1.8 puis j'ajoute 32. Alors que si je prend la ligne qui me permet de passer des Fahrenheit aux Kelvin :
1
2
<?phpecho'<p>'.$value.' °F = '.number_format((($value-32)/1.8000)+273.15,2).' K.</p>';// °F vers K
Je retire d'abord 32, puis je divise par 1.8 (ce qui revient à multiplier par 1/1.8) puis je rajoute 273.15. Je ne vois pas trop comment l'additionneur peut être au même endroit ici..
Je retire d'abord 32, puis je divise par 1.8 (ce qui revient à multiplier par 1/1.8) puis je rajoute 273.15. Je ne vois pas trop comment l'additionneur peut être au même endroit ici..
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte