Astuce PHP : afficher ou masquer le « s » de résultat(s) en une ligne

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 : ça tient en une ligne de code. Explications.

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 ?

Outil de référencement professionnel - essai gratuit Ce contenu a été publié dans Développement PHP, avec comme mot(s)-clé(s) , , , , . Vous pouvez le mettre en favoris avec ce permalien.

6 réponses à Astuce PHP : afficher ou masquer le « s » de résultat(s) en une ligne

  1. fgland dit :

    intéressant mais sauf erreur de ma part
    <?= n’est plus admis en php5. Il faut obligatoirement utiliser <?php

  2. Le Caphar dit :

    Après recherche, ce n’est pas aussi catégorique. Je cite la doc PHP5:

    Il y a quatre paires différentes de balises ouvrantes / fermantes qui peuvent être utilisées dans PHP. Deux de ces balises, <?php ?> et <script language= »php »> </script>, sont toujours disponibles. Les deux autres sont les balises courtes et les balises du style ASP?, et peuvent être activées ou désactivées depuis le fichier de configuration php.ini. Cependant, malgré le fait que des personnes trouvent les balises courtes et les balises du style ASP? pratiques, elles sont moins portables et donc, généralement, non recommandées. Note: Notez également que si vous intégrez PHP dans des documents XML ou XHTML, vous devez utiliser les balises <?php ?> pour rester conforme aux standards.

    Encore une fois, ce n’est pas forcément recommandé, mais pas non plus interdit…

  3. guillaume dit :

    Effectivement, c’est le plus court. Par contre, c’est le moins lisible :)
    L’opérateur ternaire ( toto ? titi : tatat ) tend à être bani, car en général, il est peu compréhensible et n’apporte rien si ce n’est le gain d’une ligne de code !

  4. zzzombie dit :

    guillaume > si si ça sert, à initialiser des variables de manière lisible par exemple. on tabule, et on a
    a = (cond) ? valeur récup : default;
    en espaçant correctement les deux alternatives, on a deux belles colonnes lisibles même avec 30 variables.

  5. Coccoweb dit :

    oula la, la publi-polution dans les com’s.

    Perso je fais comme ceci
    function AuPluriel($chiffre) {
    if($chiffre>1) {
    return ‘s’;
    };
    }

    $nb_resultats= »12″;
    echo « Il y a « .$nb_resultats. » résultat ».AuPluriel($nb_resultats);

    La ou ça se complique, c’est quand on rentre dans l’écurie et que l’on trouve des centaines de chevaux…

  6. admin dit :

    @coccoweb : oui, une fonction sur mesure c’est bien aussi. Merci pour la remarque sur le spam, j’ai fait du ménage dans les commentaires. Mon vieux Dotclear était une passoire, WordPress a l’air plus féroce (d’ailleurs ton commentaire était identifié comme spam, va comprendre).

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *