close

Exercice PHP 8 - TD Numéro 3

#1 Objectifs du TD open

  • Travailler en PHP, en ligne de commande, et voir ce que ça change.
  • Reconstruire une chaîne à partir d'un tableau.
  • Indexer la chaîne comme un tableau.
  • Utiliser la concaténation de chaînes.

#2 Sujet open

Je vous demande :

  1. De travailler en ligne de commande.
  2. De fabriquer la chaîne $json au format json à partir du tableau $code.
  3. De vérifier que la chaîne est bien construite sur https://jsonlint.com/.
  4. De vérifier que vous avez pensé à dire "Bonjour" 😂 (* vérifier que Bonjour est dans la chaîne).

#3 Solution pas à pas open

  1. On a un tableau qui contient les informations. Evidemment, il va falloir le parcourir. On peut le faire avec foreach. On aura besoin de récupérer la clé et la valeur. Donc déjà, on peut écrire ce morceau de code.

    Maintenant, que va-t-on va faire, à chaque tour de boucle ? On sait que l'on veut construire une chaîne. Donc, à chaque tour de boucle, on va concaténer le nouveau morceau de chaîne.

    A ce moment-là, il nous faut une variable, on va choisir $json, qui soit allouée en dehors de la boucle et initialisée avec une chaîne (* type string). On va en profiter, pour mettre y l'accolade ouvrante dont on a besoin.

    A chaque tour de boucle, le nouveau $json, sera obtenu par concaténation du $json courant, avec un nouveau morceau de chaîne. L'opérateur de concaténation de chaînes de caractères, en PHP, est le point. Ce nouveau morceau de chaîne doit être construit avec des doubles quote, car on a besoin de la substitution de variable. Maintenant, si on regarde du côté du format json, les chaînes doivent être, elles aussi, des chaînes entre doubles quote. Il faudra donc échapper ces doubles quote avec un backslash. Il faudra mettre un caractère deux points (* :), entre la clé et la valeur. Il faudra mettre une virgule à la fin de chaque couple "clé" : "valeur" ,.

    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 3
  2. On a presque le résultat. Il y a juste une virgule en fin de chaîne qu'il faut remplacer par une accolade fermante. Le mieux ici est de considérer la chaîne comme un tableau. A ce moment-là, il y a deux solutions pour trouver l'index de la virgule en fin de tableau. Soit, vous calculez la longueur de la chaîne (* du tableau) avec strlen, et vous enlevez 1 pour avoir l'index (* pas top), soit vous utilisez l'index -1 qui correspond à la position du dernier élément du tableau (* mieux).

    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 3
  3. Maintenant, on va vérifier la chaîne sur le linter jsonlint.com.
    On vérifie que l'on a bien produit une chaîne au format json
    PHP8 - Solution pas à pas du TD numéro 3
  4. Vérifier qu'on a dit "Bonjour" !!

    Ca, c'est un petit bonus. Cette fois, on va chercher la fonction dont on a besoin avec Google. On ne va pas fouiller dans la documentation comme on l'a fait dans le TD précédent (* C'est pourtant la base de farfouiller dans les docs).

    Qu'est-ce qu'on cherche ? On cherche une chaîne (* Bonjour) dans une autre chaîne (* la chaîne $json). On va utiliser les mots clés "PHP chercher sous chaîne dans chaîne".

    Solution proposée par Google
    PHP8 - Solution pas à pas du TD numéro 3

    On va voir dans la doc strstr. Il y a une note qui nous renvoie à strpos dans le cas où l'on veut juste savoir si la chaîne est présente. Ce qui est notre cas.

    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 4

    Il faut mettre un !== car strpos est une fonction qui pourrait renvoyer 0, qui vaut false. On l'a vu dans le tuto sur les Booléens en PHP. Donc, il faut vérifier en valeur et en type. On verra ça, plus en détails, lorsque l'on fera les opérateurs.

    Petit réflexe de vérification, on cherche une chaîne bidon, par exemple Tonjour au lieu de Bonjour, et on vérifie que ça ne marche pas !!

#4 Conclusion open

Conseils :

  1. Quand vous avez besoin de trouver une fonction, bien sûr, le premier réflexe est de chercher sur un moteur. Prenez quand même le temps de fouiller les docs le plus possible.
  2. Vérifiez toujours, vérifiez pas à pas. Ici, on a vérifié la chaîne sur le linter. Puis à la fin, on a changé le mot recherché (* Bonjour en Tonjour) pour vérifier que le résultat changeait lui aussi.