Exercice PHP 8 - TD Numéro 2
#1 Objectifs du TD
Dans ce TD, on fait la même chose que dans le précédent TD, mais on n'utilisera pas json_decode()
.
- Trouver les bonnes fonctions dans le manuel PHP pour traiter une chaîne. La chaîne est au format json, mais on la traitera comme une chaîne quelconque.
- Parcourir un tableau.
- Utiliser echo.
- Utiliser la substitution de variable dans une chaîne.
#2 Sujet
Je vous donne une chaîne de caractères $str
. Cette chaîne contient les informations pour afficher 3 lignes de HTML dans un navigateur. Vous avez, pour chaque ligne, le nom de la balise HTML (* h1,h2,p), accompagnée de son contenu.
Je vous demande :
- De trouver les fonctions PHP qui permettent de récupérer les informations qui se trouvent dans la chaîne
$str
. - De faire ce qu'il faut pour afficher le HTML dans le navigateur.
Ci-dessous, vous avez le code d'une structure minimale HTML avec des balises PHP. Entre ces balises PHP, j'ai déclaré la chaîne $str
. Dans ce TD je vous ai donné la chaîne sur une seule ligne. Le mieux, c'est de copier-coller ce code pour démarrer.
#3 Solution pas à pas
- Observez comment est construite cette chaîne. C'est une chaîne ou le délimiteur est la simple quote. Ensuite, vous voyez une suite de couple
"balise" : "contenu"
. Chaque couple est séparé par une virgule. - Dans un premier temps, vous devez vous dire, que vous allez extraire les 3 couples
"balise" : "contenu"
en vous servant de la virgule, puisque c'est la virgule qui sépare ces informations. - Donc, il faut trouver une fonction qui fait ça. Etant donné que, dans ce TD, vous ne pouvez pas utiliser les fonctions json, c'est logique que vous vous tourniez vers des fonctions de traitements des chaînes. Donc, vous tapez les mots clés
php fonctions chaînes caractères
sur Google. Là, vous choisissez la page de la documentation php officielle qui correspond à cette recherchephp fonctions chaînes caractères
. - Alors là évidemment, il y a une centaine de fonctions, je reconnais que ce n'est pas évident. Déjà, faites le point sur ce que vous cherchez : "Vous cherchez une fonction qui coupe une chaîne suivant un caractère qui sert de séparateur". Là, soit on recommence et on cherche à nouveau avec un moteur de recherche, soit on parcourt "manuellement" cette liste afin de trouver la bonne fonction. Etant donné que l'on découvre, on va parcourir la liste, on part du haut, on descend, on tombe sur
chunk_split
qui scinde une chaîne. On va voir. Mais malheureusement, elle scinde une chaîne en morceaux de taille fixe. Ce n'est pas ce que l'on veut. On continue. On se repère au moyen du verbe qui commence la description : Convertit, Decode, Encode... puis on trouve un nouveau Scinde. Il s'agit de la fonctionexplode
. La description est : Scinde une chaîne de caractères en segments. On va sur la page et là, on voit que c'est celle qui nous faut, notamment car on parle de séparateur (* notre virgule). En plus elle nous retourne un tableau. -
A ce stade, on voit que les accolades nous gênent. On aurait pu le voir avant et les enlever tout de suite. Ce n'est pas grave. On va chercher maintenant une fonction qui enlève un caractère d'une chaîne. Plus généralement on cherche une fonction qui extrait une sous chaîne d'une autre chaîne. Je cherche avec un moteur
php fonction extraire sous chaîne d'une chaîne
. Je trouvesubstr
. Elle me convient. En fait, avec cette fonction, j'ai tout un tas de possibilités pour enlever des morceaux de chaînes. Je peux supprimer un morceau au début, à la fin, ou les deux. C'est intéressant qu'on la découvre, et c'est aussi pour ça que je la choisis. 😃. - Maintenant, ce n'est pas trop difficile de voir que je vais pouvoir réutiliser
explode
. Le caractère deux points (* :) sera le séparateur. - Il me reste à supprimer les espaces et les doubles quote. En effet, si je regarde les résultats du traitement précédent. Par exemple, si je regarde la chaîne
' "h1" '
. En fait, c'est de la chaîne'h1'
dont j'ai besoin. Je dois enlever les espaces et les doubles quote en début et en fin de chaîne. Je peux faire ça avecsubstr
. Je vais vous en montrer une autre. Je cherchephp supprimer caractères en début et fin de chaîne
. Je trouvesubstr
mais aussitrim
. Je vois qu'avectrim
l'ordre des caractères n'intervient pas. Il s'agit d'une liste de caractères. -
C'est gagné 😤 ! Sauf que, je me rends compte, qu'il est possible de supprimer les accolades avec les
trim
qui sont déjà en place. Et du coup, je peux supprimer les deux appels àsubstr
.
#4 Conclusion
Il y a beaucoup de fonctions de traitements de chaînes de caractères. Ce n'est pas facile, mais soyez patient, car elles sont très riches et le plus souvent elles apportent la solution. Enfin, je vous signale que les expressions régulières, complètent la panoplie des possibilités de solutions lorsque l'on manipule des chaînes de caractères.