Exercice PHP 8 - TD Numéro 3
#1 Objectifs du TD
- 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
Je vous demande :
- De travailler en ligne de commande.
- De fabriquer la chaîne
$json
au format json à partir du tableau$code
. - De vérifier que la chaîne est bien construite sur https://jsonlint.com/.
- De vérifier que vous avez pensé à dire "Bonjour" 😂 (* vérifier que Bonjour est dans la chaîne).
#3 Solution pas à pas
-
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" ,
. -
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 enlevez1
pour avoir l'index (* pas top), soit vous utilisez l'index-1
qui correspond à la position du dernier élément du tableau (* mieux). - Maintenant, on va vérifier la chaîne sur le linter jsonlint.com.
-
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"
.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.
Il faut mettre un
!==
carstrpos
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 deBonjour
, et on vérifie que ça ne marche pas !!
#4 Conclusion
Conseils :
- 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.
- 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.