Voici une astuce toute simple pour diminuer la taille de vos tests quand ceux-ci sont simples et répétitifs.
Admettons que vous souhaitiez vérifier que la valeur d’une variable vaux soit 2, soit 3, soit 7, soit 9. La méthode qui vient immédiatement à l’esprit est de multiplier les tests de cette manière :
if ($variable == 2 || $variable == 3 || $variable == 7 || $variable == 9 ) { // ... code ... }
Cela fait beaucoup de lignes pour un test assez simple finalement. En y regardant de plus près, on s’apercoit qu’on peut reformuler le problème ainsi : la valeur d’une variable est-elle dans l’ensemble 2, 3, 7, 9 ?. Ce qui s’écrit ainsi en PHP :
if (in_array($variable, array(2, 3, 7, 9))) { // ... code ... }
Le code est maintenant beaucoup plus concis et tout aussi simple à comprendre.
Mise à jour :
Suite au commentaire de michel v, j’ai effectué un petit benchmark et il s’avère effectivement que la solution avec in_array est nettement plus lente que l’autre. De plus, la différence grandie lorsque la valeur à trouver est située au début de la liste des tests.
Néanmoins, il faut relativiser car si la différence de temps d’exécution entre les 2 solutions est importante, dans l’absolu, la durée en elle même est infime et donc négligeable dans 99,99% des cas.
C’est m?me encore plus concis en Python :
if variable in [2, 3, 7, 9]:
# … code …
(Rah, pas moyen de mettre de tabulation ou des espaces multiples dans un commentaire)
La m?me syntaxe est disponible sous Delphi.
Plus concis, et plus lent aussi. in_array() est tr?s lent…
Certe c’est plus lent (?a semble normal) mais c’est autrement plus pratique (comme bcp de fonctions php dans ce style). A ce propos, l’un de vous connaitrai un site de benchmark comparatif de vitesse de fonctions php ?
Accessoirement, il faudrai faire ce test avec un code optimis? avec MMCache ou un autre pr?-compilateur de ce genre pour voir si la diff?rence de vitesse viens bien de la fonction elle m?me ou du parsing de la condition.
SToto98>A ce propos, l’un de vous connaitrai un site de benchmark comparatif de vitesse de fonctions php ?
Je sais qu’il en existe un que j’ai d?j? consult? mais je n’arrive pas ? retrouver l’URL.
SToto98>Accessoirement, il faudrai faire ce test avec un code optimis? avec MMCache ou un autre pr?-compilateur de ce genre
Tu fais une remarque judicieuse car sans faire attention j’ai test? avec eAccelerator (le fork de Turck MMCache).
Et hop, un p’tit benchmark trouv? sur le forum de developpez.net
iubito.developpez.com/php…
Ayant d?j? utilis? in_array() sur de gros tableaux (et j’avais pas le choix), je te confirme que c’est tr?s lent. Pour des tableaux avec peu d’indices, ?a va encore … mais pour le reste, laisse tomber !
il y a aussi ?a :
http://www.estvideo.com/dew/page...
je pense que c’est celui la que tu cherchait JM non ?
Ldo> En fait, je ne connaissais pas ce comparatif mais il a l’air sympa.
Celui dont je parle a environ 1 an, est en Anglais et est beaucoup plus spartiate dans sa pr?sentation.
Ldo, j’ai fini par retrouver le fameux test dont je parlais : http://www.php.lt/benchmark/phpbench.php