Astuce PHP : afficher ou masquer le "s" de résultat(s) en une ligne
Par Damien Ravé - Le Caphar, dimanche 21 janvier 2007 à 15:45 :: Développement PHP :: #61 :: rss
J'ai longtemps cherché un moyen simple et efficace de déterminer si le nombre de résultats d'un moteur de recherche prenait un S. Et je crois avoir trouvé la méthode la plus condensée : elle tient en une ligne de code.
Concrètement, on veut afficher un "s" uniquement si le nombre de résultats est supérieur ou égal à 2, ou, tout simplement, supérieur à 1. Si l'on obtient 0 ou 1 résultat, le "s" est superflu. La première étape consiste à déterminer la valeur à prendre en compte. Si c'est un résultat de base de données, je pourrai utiliser mysql_num_rows(). Si j'ai passé les résultats dans un tableau associatif (par ex. via ma fonction mysql_tableau), je peux utiliser count($mon_tableau). J'affecte cette valeur à une variable $nb_resultats. Une première ébauche de mon script donnera donc ça :
Il y a <?php
print $nb_resultats;
?> résultat<?php
if ($nb_resultats > 1)
{
print "s";
}
?>
C'est assez simple, mais dans une longue page de code, ça rajoute de la complexité. On pourrait aussi la mettre sur une ligne, mais je ne trouve pas ça très élégant :
Il y a <?php print $nb_resultats; ?> résultat<?phpif ($nb_resultats > 1) { print "s"; } ?>
C'est là qu'entre en scène la syntaxe raccourcie des conditions : print ($a == true) ? 'a est vrai' : 'a n'est pas vrai';. C'est l'équivalent d'une fonction if/else. La condition est évaluée à la volée (ici à l'intérieur de la commande print), et renvoie donc la première valeur si la condition est vraie, et la seconde si elle n'est pas vraie. Notre code devient donc :
Il y a <?php print $nb_resultats; ?> résultat<?php print ($nb_resultats > 1) ? "s" : ""; ?>
On s'approche d'un résultat visuellement sympathique, mais il y a un détail qui continue de me chagriner : la commande print. A force de mélanger le HTML et le PHP, on se retrouve avec des print à tout bout de champ, qui nuisent à la lisibilité du code. Qu'à cela ne tienne : il existe aussi une syntaxe raccourcie. <?= remplace exactement la syntaxe <?php print. On arrive donc à une syntaxe finale de ce type :
Il y a <?= $nb_resultats; ?> résultat<?= ($nb_resultats > 1) ? "s" : ""; ?>
Depuis que j'utilise cette syntaxe, je perds moins de temps à naviguer dans mes scripts, ma productivité a augmenté de 27%, mon salaire de 40% et j'ai 10/10 à chaque oeil. Etonnant, non ?
Articles traitant des mêmes sujets
- Découvrez le mur de flux RSS pour voir vos photoblogs en images
- Antispam pour les commentaires de blog : un Captcha sans images
- Déboguer les erreurs MySQL grâce aux alertes e-mail
- Vos utilisateurs buggent ? Quelques pièges à éviter dans vos applications en ligne
- Je recrute : un(e) webdesigner-développeur-ergonome-architecte ambitieux, communicant et souriant (IDF)
- 7 pratiques Javascript qui changent la vie
- Tutorial MySQL : alléger des requêtes successives avec CREATE TEMPORARY TABLE
- Vers un développement Web durable
Scoop it!
Tape Moi!
Nuouz Ca!
Memes Ca!

Commentaires
1. Le jeudi 24 mai 2007 à 21:22, par fgland (nouveau venu)
2. Le mercredi 30 mai 2007 à 13:25, par Le Caphar (nouveau venu)
3. Le lundi 25 février 2008 à 15:05, par guillaume (nouveau venu)
4. Le mercredi 2 avril 2008 à 01:51, par zzzombie (nouveau venu)
Ajouter un commentaire